home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -screenplay- / shareware / lightspeed2 / source / light.e
Text File  |  1999-01-25  |  101KB  |  3,268 lines

  1. OPT LARGE
  2.  
  3. MODULE 'amigalib/ports',
  4.        'amigalib/io',
  5.        'devices/gameport',
  6.        'devices/inputevent',
  7.        'devices/timer',
  8.        'devices/audio',
  9.        'exec/execbase',
  10.        'exec/io',
  11.        'exec/nodes',
  12.        'exec/ports',
  13.        'exec/memory',
  14.        'exec/devices',
  15.        'graphics/view',
  16.        'intuition/intuition',
  17.        'intuition/screens',
  18.        'gadtools',
  19.        'eaudio',
  20.        'graphics/text',
  21.        'libraries/gadtools',
  22.        'intuition/gadgetclass',
  23.        'graphics/modeid',
  24.        'mousepointer',
  25.        'devices/input',
  26.        'tools/file',
  27.        'iff',
  28.        'libraries/iff',
  29.        'graphics/rastport'
  30.  
  31.       
  32. -> GADGET & ERROR ENUMERATIONS
  33.  
  34. ENUM ERR_NONE, ERR_DEV, ERR_DEV2, ERR_SCREEN, ERR_ACTIVE, ERR_GAD, 
  35.      ERR_WINDOW, ERR_FILE, ERR_IO, ERR_PORT, MYGAD_BUTTON, ERR_AUPORT,
  36.      ERR_AUIO, ERR_DEV3, ERR_AUDIO, TEM, 
  37.      MYGAD_CYCLE, ERR_KICK, ERR_LIB, MYGAD_SLIDER, MYGAD_SLIDER2, 
  38.      MYGAD_SLIDER3, ERR_VIS, ERR_DEVTI, ERR_DEVIN, ERR_ACPORT, ERR_TIPORT, 
  39.      ERR_INPORT, ERR_TIIO, ERR_INIO, MYGAD_BUTTON6, MYGAD5_BUTTON2, 
  40.      MYGAD5_BUTTON, MYGAD_BUTTON2, MYGAD2_SLIDER, MYGAD_BUTTON3, MYGAD_BUTTON4, 
  41.      MYGAD_BUTTON5, MYGAD2_CHECKBOX, MYGAD2_CHECKBOX2, MYGAD2_CHECKBOX3, 
  42.      MYGAD2_CHECKBOX4, MYGAD2_CHECKBOX5, MYGAD2_BUTTON, MYGAD2_BUTTON2, MYGAD3_CYCLE, 
  43.      MYGAD3_CYCLE2, MYGAD3_CYCLE3, MYGAD3_CYCLE4, MYGAD3_BUTTON, 
  44.      MYGAD3_BUTTON2, MYGAD4_BUTTON, MYGAD4_BUTTON2, MYGAD3_STRING, 
  45.      MYGAD3_STRING2, MYGAD3_STRING3, MYGAD3_STRING4, MYGAD4_BUTTON3, 
  46.      MYGAD4_BUTTON4, MYGAD4_BUTTON5, MYGAD4_BUTTON6
  47.  
  48. -> END GADGET & ERROR ENUMERATIONS
  49.  
  50. DEF abutton, abutton2, acycle, abutton3, abutton4, abutton5, speed1=0,
  51.     bcheckbox, bcheckbox2, bcheckbox3, bslider, bcheckbox4, bcheckbox5,
  52.     bbutton, bbutton2, ccycle4, ccycle, ccycle3, ccycle2, cbutton, cbutton2,
  53.     errmessage[200]:STRING, dbutton, dbutton2, dslider2, dslider3, 
  54.     slider_levela, slider_levelb, slider_levelc, mywin4=NIL:PTR TO window, 
  55.     gad4 , dbutton3, dbutton4, dbutton5, dbutton6, cstring:PTR TO gadget, 
  56.     cstring2:PTR TO gadget, cstring3:PTR TO gadget, cstring4:PTR TO gadget, 
  57.     gad5, ebutton2:PTR TO gadget, ebutton:PTR TO gadget, terminated5=FALSE, 
  58.     wcheat=0, who, limspeed1=0, limspeed2=0, limspeed3=0, limspeed4=0, 
  59.     movex, movey, movex2, movey2, blocked5, newgame=TRUE , joy1loop=TRUE, 
  60.     joy2loop=TRUE, open_devin=FALSE, restoremouse=TRUE, joy3loop=TRUE, 
  61.     joy4loop=TRUE, playcount=0, e[4]:ARRAY, exec:PTR TO execbase, vi,
  62.     topborder,quit=0, screen=NIL:PTR TO screen, topaz80, gamepicmem=NIL,
  63.     terminated, terminated2, terminated3, terminated4, mainwin=NIL:PTR TO window,
  64.     mywin=NIL:PTR TO window, start1=FALSE, myreq:requester, samplec=NIL:PTR TO LONG,
  65.     sampled=NIL:PTR TO LONG, samplei=NIL:PTR TO LONG, samplend, sampleni,
  66.     swooshy=TRUE, sliderb_level=70,
  67.     samplenc, shineBorder, shadowBorder, hiddenclosed=TRUE, movementx, grey, 
  68.     movementy, movementx3, movementy3, shineBorderC, shadowBorderC, bee, 
  69.     playon=FALSE, pausewin, play1control=0, play2control=1, play3control=2,
  70.     play4control=3, noterminate3=0, obstacles=TRUE, accelaration=TRUE, wrap=TRUE, 
  71.     blocks=FALSE, playerno=0, not_finished, tname1[7]:STRING, tname2[7]:STRING,
  72.     tname3[7]:STRING, tname4[7]:STRING, name1[7]:STRING, name2[7]:STRING,  
  73.     name3[7]:STRING, name4[7]:STRING, joy1=1, joy2=4, joy3=3, joy4=2, joy,
  74.     controller_type_addr1, controller_type_addr2, play1=0, play2=0, play3=0,
  75.     play4=0, x1=194, y1=221, x2=40, y2=167, x3=106, y3=47, x4=275, y4=83,
  76.     cx1=194, cy1=221, cx2=40, cy2=167, cx3=106, cy3=47, cx4=275, cy4=83,
  77.     cway1=1, cway2=2, cway3=3, cway4=4, tempy1, tempx1, die1=TRUE,  
  78.     cdie1=FALSE, cloop1=0, cloop2=10, cloop3=17, cloop4=25, cloop, die2=TRUE, 
  79.     diel, x, y, speed, die3=FALSE , cdie2=FALSE, cdie3=TRUE, cdie4=FALSE,
  80.     die4=TRUE, speed3=0, speed4=0, speed2=0, chipx, chipy, rndchip, 
  81.     col1r=255, col1g=255, col1b=255, col2r=255, col2g=255, col2b=165, col3r=165, 
  82.     col3g=255, col3b=165, col4r=255, col4g=180, col4b=180, sactive, 
  83.     timerio=NIL:PTR TO timerequest, timermp=NIL:PTR TO mp, howlong, 
  84.     howlong2, mouserequest=NIL:PTR TO iostd, lport=NIL:PTR TO mp,
  85.     game_io_msg=NIL:PTR TO iostd, game_msg_port=NIL, open_dev=FALSE,
  86.     game_io_msgm=NIL:PTR TO iostd,game_msg_portm=NIL,open_devm=FALSE,
  87.     open_devti=FALSE, hidden:PTR TO window, mywinch:PTR TO window,
  88.     stupid=69, clever, audiomp=NIL:PTR TO mp, audioio=NIL:PTR TO ioaudio,
  89.     open_devau=FALSE, bob=0, audioprob:PTR TO unit, samplen, 
  90.     sample=NIL:PTR TO LONG, return=0, iffinram, ct[256]:ARRAY OF INT,
  91.     mdwin=NIL:PTR TO window, chiplen1, chiplen2, chip1data, chip2data, chip1mem=NIL, chip2mem=NIL, chip1, chip2
  92.  
  93.  
  94. CONST JOY_X_DELTA=1, JOY_Y_DELTA=1, TIMEOUT_SECONDS=0, SLIDER_MIN=0, 
  95.       SLIDER_MAX=255
  96.  
  97.  RAISE ERR_SCREEN IF OpenS()=NIL
  98.  RAISE ERR_WINDOW IF OpenW()=NIL
  99.  RAISE ERR_LIB IF OpenLibrary()=NIL
  100.  RAISE ERR_GAD  IF CreateGadgetA()=NIL
  101.  RAISE ERR_VIS IF GetVisualInfoA()=NIL
  102.  RAISE TEM     IF AllocMem()=NIL
  103.  
  104. PROC resetdefs()
  105.    x1:=194 ;   y1:=221 
  106.    x2:=40  ;   y2:=167
  107.    x3:=106 ;   y3:=47
  108.    x4:=275 ;   y4:=83
  109.   cx1:=194 ;  cy1:=221 
  110.   cx2:=40  ;  cy2:=167
  111.   cx3:=106 ;  cy3:=47
  112.   cx4:=275 ;  cy4:=83
  113.   cway1:=1 
  114.   cway2:=2 
  115.   cway3:=3
  116.   cway4:=4
  117.   speed1:=0
  118.   speed2:=0
  119.   speed3:=0
  120.   speed4:=0
  121.   start1:=FALSE
  122.   newgame:=TRUE
  123.   joy1loop:=TRUE
  124.   joy2loop:=TRUE
  125.   joy3loop:=TRUE
  126.   joy4loop:=TRUE
  127.   playcount:=0
  128.   cloop1:=0
  129.   cloop2:=10
  130.   cloop3:=17
  131.   cloop4:=25
  132. ENDPROC                         
  133.  
  134. PROC main() HANDLE
  135.   DEF pub_screen_font:PTR TO textattr, opened_font, portlock, 
  136.       actport=NIL:PTR TO mp, kickversion=37
  137. tname1:='Jam' ; tname2:='Custard' ; tname3:='Syrup' ; tname4:='Treacle'
  138.  
  139.    IF KickVersion(kickversion)=FALSE THEN Raise(ERR_KICK)
  140.   portlock:=FindPort('LightSpeed.Active')
  141.   IF portlock<>0 THEN Raise(ERR_ACTIVE)
  142.  
  143. IF NIL=(actport:=createPort('LightSpeed.Active', 0)) THEN Raise(ERR_ACPORT)
  144. IF NIL=(timermp:=createPort('LightSpeed-Timer',0)) THEN Raise(ERR_TIPORT)
  145. IF NIL=(timerio:=createExtIO(timermp, SIZEOF timerequest)) THEN Raise(ERR_TIIO)
  146. IF (OpenDevice('timer.device', UNIT_WAITUNTIL, timerio, 0))<>0 THEN Raise(ERR_DEVTI) ELSE open_devti:=TRUE
  147. IF NIL=(lport:=createPort('LightSpeed-Input',0)) THEN Raise(ERR_INPORT)
  148. IF NIL=(mouserequest:=CreateIORequest(lport, SIZEOF iostd)) THEN Raise(ERR_INIO)
  149. IF (OpenDevice('input.device', 0, mouserequest,0))<>0 THEN Raise(ERR_DEVIN) ELSE open_devin:=TRUE
  150. IF NIL=(game_msg_port:=createPort('LightSpeed.GamePort', 0)) THEN Raise(ERR_PORT)
  151. IF NIL=(game_io_msg:=createExtIO(game_msg_port, SIZEOF iostd)) THEN Raise(ERR_IO)
  152. IF (OpenDevice('gameport.device', 1, game_io_msg, 0))<>0 THEN Raise(ERR_DEV) ELSE open_dev:=TRUE
  153. IF NIL=(game_msg_portm:=createPort('LightSpeed.GamePort-Mouse', 0)) THEN Raise(ERR_PORT)
  154. IF NIL=(game_io_msgm:=createExtIO(game_msg_portm, SIZEOF iostd)) THEN Raise(ERR_IO)
  155. IF (OpenDevice('gameport.device', 0, game_io_msgm, 0))<>0 THEN Raise(ERR_DEV2) ELSE open_devm:=TRUE
  156. IF NIL=(audiomp:=createPort('LightSpeed-Audio',0)) THEN Raise(ERR_AUPORT)
  157. IF NIL=(audioio:=CreateIORequest(audiomp, SIZEOF ioaudio)) THEN Raise(ERR_AUIO)
  158. IF (OpenDevice('audio.device',0, audioio, NIL))<>0 THEN Raise(ERR_DEV3) ELSE open_devau:=TRUE 
  159. initaudio()
  160. gadtoolsbase:=OpenLibrary('gadtools.library', 37)
  161. iffbase:=OpenLibrary('iff.library', 22)
  162. setup()
  163. decrypt()
  164.         pub_screen_font:=['topaz.font',8,0,65]:textattr
  165.         opened_font:=OpenFont(pub_screen_font)
  166.  screen:=OpenS(320,256,6,NIL,'LightSpeed2',[SA_BEHIND, TRUE, SA_PENS, [-1]:INT, SA_FONT, pub_screen_font, NIL])
  167. mainwin:=OpenW(0,11,320,245,NIL, WFLG_BORDERLESS OR WFLG_ACTIVATE, NIL, screen,$F,NIL,NIL)
  168. SetTopaz(8)
  169.  
  170. chip1:=[$FFFFFFFF, $FFFFFE00, $FFFF81C7, $FFFFFA00, $FFFF9C7F, $FFFFC400, $FFFFB8FF, $FFFF8600, $FFFFB1FF, $400, $FFFFA3FE, $200, $FFFF87FC, $800, $FFFFCFF8, $1A00, $FFFFDFF0, $3C00, $FFFFFFE0, $7600, $FFFFBFC0, $FFFFE400, $FFFFBF81, $FFFFC200, $FFFFBF03, $FFFF8800, $FFFFFE07, $1A00, $FFFFFC0E, $3800, $FFFFF81C, $7200, $FFFFF038, $FFFFE000, $FFFFE071, $FFFFC200, $FFFFC0E3, $FFFF8000, $FFFFC1C7, $200, $FFFFC38E, $0, $FFFFB8E0, $200, $5555, $5400, $FFFFAAAA, $FFFFAA00, $7FC0, $FFFFE000, $FFFFFC00, $200, $7800, $0, $FFFFF000, $200, $6000, $400, $FFFFC000, $600, $4000, $400, $FFFFC000, $600, $4000, $C00, $FFFF8000, $1E00, $0, $3800, $FFFF8000, $7A00, $0, $FFFFF800, $FFFF8001, $FFFFFE00, $3, $FFFFF400, $FFFFC007, $FFFFE600, $400F, $FFFFC400, $FFFFC01F, $FFFF8E00, $3F, $1C00, $FFFF807E, $3E00, $7E3, $FFFFFC00, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $3F, $0, $FFFF83F8, $200, $7F0, $0, $FFFF8FE0, $200, $1FC0, $0, $FFFFBF80, $200, $3F00, $0, $FFFFBE00, $200, $3C00, $0, $FFFFF800, $200, $7000, $400, $FFFFE000, $600, $4000, $400, $FFFFC000, $200, $4000, $800, $FFFF8000, $1A00, $0, $3800, $FFFF8000, $7200, $0, $FFFFE000, $FFFF8001, $FFFFC200, $1C, $0, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $0, $FFFFE400, $FFFF8000, $3E00, $0, $7C00, $FFFF8000, $FFFFFE00, $1, $FFFFFC00, $FFFF8003, $FFFFFE00, $7, $FFFFFC00, $FFFF800F, $FFFFFE00, $1F, $FFFFFC00, $FFFF803F, $FFFFFE00, $7F, $FFFFFC00, $FFFF80FF, $FFFFFE00, $1FF, $FFFFFC00, $FFFF83FF, $FFFFFA00, $7FF, $FFFFF800, $FFFFCFFF, $FFFFFA00, $5FFF, $FFFFF800, $FFFFFFFF, $FFFFF200, $3FFF, $FFFFE000, $FFFFBFFF, $FFFFC200, $7FFC, $0, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $7FFF, $1C00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFBFFF, $FFFFFE00, $3FFF, $FFFFFC00, $FFFFBFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $7FFF, $FFFFE400, $FFFFFFF8, $3E00, $7FF0, $7C00, $FFFFFFE0, $FFFFFE00, $7FC1, $FFFFFC00, $FFFFFF83, $FFFFFE00, $7F07, $FFFFFC00, $FFFFFE0F, $FFFFFE00, $7C1F, $FFFFFC00, $FFFFF83F, $FFFFFE00, $707F, $FFFFFC00, $FFFFE0FF, $FFFFFE00, $41FF, $FFFFFC00, $FFFFC3FF, $FFFFFA00, $47FF, $FFFFF800, $FFFFCFFF, $FFFFFA00, $5FFF, $FFFFF800, $FFFFFFFF, $FFFFF200, $3FFF, $FFFFE000, $FFFFBFFF, $FFFFC200, $7FFC, $0, $FFFFAAAA, $FFFFAA00]:INT
  171.  
  172. chip2:=[$FFFFFFFF, $FFFFFE00, $FFFFFE38, $FFFFE600, $FFFFEDBF, $C00, $FFFFC93E, $E00, $FFFFDB7E, $1C00, $FFFFD27C, $1A00, $FFFFF6FC, $3000, $FFFFA4F8, $3200, $FFFFADF8, $6000, $FFFF89F0, $6600, $FFFFDBF0, $FFFFCC00, $FFFFD3E0, $FFFFCE00, $FFFFF7E1, $FFFF9C00, $FFFFA7C1, $FFFF9E00, $FFFFAFC3, $3800, $FFFF8F83, $3200, $FFFFDF86, $7000, $FFFFDF06, $6600, $FFFFFF0C, $FFFFE400, $FFFFBE0C, $FFFFCE00, $FFFFBE19, $FFFFCC00, $FFFFC71C, $7E00, $5555, $5400, $FFFFAAAA, $FFFFAA00, $1F8, $1800, $FFFF9C70, $FFFFFE00, $38F1, $FFFFFC00, $FFFFB8E1, $FFFFFE00, $31E3, $FFFFF800, $FFFFB1C3, $FFFFF200, $63C7, $FFFFF000, $FFFFE387, $FFFFE200, $478F, $FFFFE000, $FFFFC70F, $FFFFC200, $4F1F, $FFFFC000, $FFFFCE1F, $FFFF8200, $1E3F, $FFFF8000, $FFFF9C3F, $600, $3C7F, $C00, $FFFFB87E, $E00, $38FE, $1C00, $FFFFB0FC, $1E00, $71FC, $3C00, $FFFFE1F8, $3E00, $3F03, $FFFFFC00, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $7, $FFFFF800, $FFFF83F0, $200, $7F0, $0, $FFFF87E0, $200, $FE0, $400, $FFFF8FC0, $E00, $1FC0, $C00, $FFFF9F80, $1E00, $3F80, $1C00, $FFFFBF00, $3E00, $3F00, $3C00, $FFFFBE00, $7E00, $7E00, $7C00, $FFFFFC00, $FFFFFE00, $7C00, $FFFFFC00, $FFFFF801, $FFFFFE00, $7801, $FFFFFC00, $FFFFF003, $FFFFFE00, $7003, $FFFFFC00, $FFFFE007, $FFFFFE00, $FF, $FFFFFC00, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $0, $400, $FFFF800F, $FFFFFE00, $F, $FFFFFC00, $FFFF801F, $FFFFFE00, $1F, $FFFFFC00, $FFFF803F, $FFFFFE00, $3F, $FFFFFC00, $FFFF807F, $FFFFFE00, $7F, $FFFFFC00, $FFFF80FF, $FFFFFE00, $FF, $FFFFFC00, $FFFF81FF, $FFFFFE00, $1FF, $FFFFFC00, $FFFF83FF, $FFFFFE00, $3FF, $FFFFFC00, $FFFF87FF, $FFFFFE00, $7FF, $FFFFFC00, $FFFF8FFF, $FFFFFE00, $FFF, $FFFFFC00, $FFFF9FFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFF8000, $200, $0, $0, $FFFFAAAA, $FFFFAA00, $FFFFAAAA, $FFFFAA00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFFFFF, $FFFFFE00, $7FFF, $FFFFFC00, $FFFFAAAA, $FFFFAA00]:INT
  173.  
  174.  
  175. chiplen1:=ListMax(chip1)
  176. chip1mem:=AllocMem(chiplen1, MEMF_CHIP)
  177. CopyMem(chip1, chip1mem, chiplen1)
  178. chiplen2:=ListMax(chip2)
  179. chip2mem:=AllocMem(chiplen2, MEMF_CHIP)
  180. CopyMem(chip2, chip2mem, chiplen2)
  181.  
  182. chip1data:=[0, 0, 23, 23, 6, chip1mem, 63, 0, NIL]:image 
  183. chip2data:=[0, 0, 23, 23, 6, chip2mem, 63, 0, NIL]:image
  184.  
  185. gamepicmem:=AllocMem(54330, MEMF_CHIP)
  186. CopyMem({gamepic}, gamepicmem, 54330)
  187. iffinram:=AllocMem(59966, MEMF_CHIP)
  188. CopyMem({mainpic}, iffinram, 59966)
  189. setcols()
  190. IfFL_DecodePic(iffinram,screen+184)
  191. intrnd()
  192.  
  193. IF FileLength('PROGDIR:light.prefs')>-1 THEN loadprefs()
  194. ScreenToFront(screen)
  195. ShowTitle(screen, TRUE)
  196.  playData(sample,samplen,4500000,CHAN_LEFT1+CHAN_RIGHT1+CHAN_LEFT2+CHAN_RIGHT2,64)
  197.     WaitTOF()
  198.     exitLoop(CHAN_LEFT1+CHAN_RIGHT1+CHAN_LEFT2+CHAN_RIGHT2)
  199.  gadtoolsWindow(0)
  200.  IF quit=0
  201.          begingame()
  202.  ENDIF
  203.  
  204. WHILE quit=0
  205. terminated:=FALSE
  206. resetdefs()
  207. terminated5:=FALSE
  208. onMousePointer(hidden)
  209. scorecard()
  210. IF playon=TRUE
  211. begingame()
  212. playon:=FALSE
  213. ELSE
  214. SetStdRast(hidden.rport)
  215. Box(0,0,319,255,0)
  216. setcols()
  217. CloseW(hidden)
  218. hiddenclosed:=TRUE 
  219. play1:=0
  220. play2:=0
  221. play3:=0
  222. play4:=0
  223.   gadtoolsWindow(1)
  224. IF quit<>0
  225. hiddenclosed:=TRUE 
  226. JUMP term
  227. ENDIF
  228.          begingame()
  229. ENDIF
  230. ENDWHILE
  231. term:
  232.  
  233.  EXCEPT DO
  234.   IF hiddenclosed=FALSE THEN CloseW(hidden)
  235.   IF opened_font THEN CloseFont(opened_font)
  236.   IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  237.   IF iffbase THEN CloseLibrary(iffbase)
  238.   IF iffinram THEN FreeMem(iffinram, 59966)
  239.   IF gamepicmem THEN FreeMem(gamepicmem, 54330)
  240.   IF chip1mem THEN FreeMem(chip1mem, chiplen1)
  241.   IF chip2mem THEN FreeMem(chip2mem, chiplen2)
  242.   IF mainwin THEN CloseW(mainwin)
  243.   IF screen THEN CloseS(screen)
  244.   IF actport THEN deletePort(actport)
  245.   IF open_devti THEN CloseDevice(timerio)
  246.   IF timerio THEN deleteExtIO(timerio)
  247.   IF timermp THEN deletePort(timermp)
  248.   IF restoremouse=FALSE THEN instmouse()
  249.   IF open_devin THEN CloseDevice(mouserequest)
  250.   IF mouserequest THEN DeleteIORequest(mouserequest)
  251.   IF lport THEN deletePort(lport)    
  252.   IF open_dev THEN CloseDevice(game_io_msg)
  253.   IF game_io_msg THEN deleteExtIO(game_io_msg)
  254.   IF game_msg_port THEN deletePort(game_msg_port)
  255.   IF open_devm THEN CloseDevice(game_io_msgm)
  256.   IF game_io_msgm THEN deleteExtIO(game_io_msgm)
  257.   IF game_msg_portm THEN deletePort(game_msg_portm)
  258.   IF sample THEN FreeMem(sample, 12760)
  259.   IF samplec THEN FreeMem(samplec, 3900)
  260.   IF sampled THEN FreeMem(sampled, 3121)
  261.   IF samplei THEN FreeMem(samplei, 9536)
  262.   IF open_devau THEN cleanupaudio()
  263.   IF open_devau THEN CloseDevice(audioio)
  264.   IF audioio THEN DeleteIORequest(audioio)
  265.   IF audiomp THEN deletePort(audiomp)
  266.    
  267.  IF exception
  268.   SELECT exception
  269.    CASE "MEM" ;     request('out of memory',0,'')
  270.    CASE TEM ;       request('out of memory',0,'')
  271.    CASE "^C";       request('User ***Break',0,'')        
  272.    CASE ERR_DEV;    request('could not open gameport device, unit:1',0,'')
  273.    CASE ERR_DEV2;   request('could not open gameport device, unit:0',0,'')
  274.    CASE ERR_DEV3;   request('could not open/allocate the audio device',0,'')
  275.    CASE ERR_DEVTI;  request('could not open timer device, UNIT_MICROHZ',0,'')
  276.    CASE ERR_DEVIN;  request('could not open input device, unit:0',0,'')
  277.    CASE ERR_IO;     request('could not create gameport I/O',0,'')
  278.    CASE ERR_TIIO;   request('could not create timer I/O',0,'')
  279.    CASE ERR_INIO;   request('could not create input I/O',0,'')
  280.    CASE ERR_PORT;   request('could not create gameport port',0,'')
  281.    CASE ERR_ACPORT; request('could not create LightSpeed.Active port',0,'')
  282.    CASE ERR_TIPORT; request('could not create LightSpeed.Timer port',0,'')
  283.    CASE ERR_INPORT; request('could not create LightSpeed.Input port',0,'')
  284.    CASE ERR_SCREEN; request('could not create a screen',0,'')
  285.    CASE ERR_AUDIO;  request('audio prob',0,'')
  286.    CASE ERR_WINDOW; request('could not create a window',0,'')
  287.    CASE ERR_GAD;    request('could not create the gadgets',0,'')
  288.    CASE ERR_VIS;    request('could not get the visual info',0,'')
  289.    CASE ERR_ACTIVE; request('LightSpeed2 already active',0,'')
  290.    CASE ERR_LIB;    request('could not open Gadtools Library V.37',0,'')
  291.    CASE ERR_KICK;   REPEAT ; kickversion:=kickversion-1 ; UNTIL KickVersion(kickversion)=TRUE ;  WriteF('\nLightSpeed2 needs at least Kickstart version 37 to run:\nyou have Kickstart version \d\n\nMaybe its time to upgrade :-)\n\n',kickversion) ; WriteF('Error: returncode 236\n') ; return:=236
  292.    CASE 18766;      request('Error Loading Data Files\n\n (File Read Protected?)',0,'')
  293.    CASE "OPEN";     StringF(errmessage,'could not open file \s', IF exceptioninfo THEN exceptioninfo ELSE '') ; request(errmessage,0,'')
  294.    DEFAULT 
  295.       IF exception<10000
  296.             StringF(errmessage,'Program Caused Error: \d',exception)
  297.             request(errmessage,0,'')
  298.       ELSE
  299.             e[4]:=0
  300.             ^e:=exception
  301.             WHILE e[]=0 DO e++
  302.                 IF exceptioninfo<1000
  303.                      StringF(errmessage,'Error: "\s" [\d]',exceptioninfo)
  304.                 ELSE
  305.                      StringF(errmessage,'Error: "\s" [\h]',exceptioninfo)
  306.                 ENDIF
  307.                      request(errmessage,0,'') 
  308.       ENDIF
  309. ENDSELECT
  310.  ENDIF
  311. ENDPROC return
  312.  
  313. PROC setcols2()
  314. SetColour(screen,0,170,170,170)
  315. SetColour(screen,1,0,0,0)
  316. SetColour(screen,2,255,255,255)
  317. SetColour(screen,3,100,100,100)
  318. SetColour(screen,4,255,255,255)
  319. SetColour(screen,5,255,255,165)
  320. SetColour(screen,6,165,255,165)
  321. SetColour(screen,7,255,180,180)
  322. SetColour(screen,8,0,0,220)
  323. SetColour(screen,9,0,0,212)
  324. SetColour(screen,10,0,0,206)
  325. SetColour(screen,11,0,0,198)
  326. SetColour(screen,12,0,0,191)
  327. SetColour(screen,13,0,0,184)
  328. SetColour(screen,14,0,0,177)
  329. SetColour(screen,15,0,0,169)
  330. SetColour(screen,16,0,0,163)
  331. SetColour(screen,17,76,35,83)
  332. SetColour(screen,18,48,7,76)
  333. SetColour(screen,19,101,62,90)
  334. SetColour(screen,20,0,0,134)
  335. SetColour(screen,21,0,0,127)
  336. SetColour(screen,22,0,0,120)
  337. SetColour(screen,23,0,0,112)
  338. SetColour(screen,24,0,0,106)
  339. SetColour(screen,25,0,0,98)
  340. SetColour(screen,26,0,0,91)
  341. SetColour(screen,27,0,0,84)
  342. SetColour(screen,28,0,0,77)
  343. SetColour(screen,29,0,0,69)
  344. SetColour(screen,30,0,0,63)
  345. SetColour(screen,31,0,0,55)
  346. SetColour(screen,32,131,74,194)
  347. SetColour(screen,33,120,70,182)
  348. SetColour(screen,34,110,68,171)
  349. SetColour(screen,35,99,65,158)
  350. SetColour(screen,36,88,62,147)
  351. SetColour(screen,37,79,58,135)
  352. SetColour(screen,38,73,56,120)
  353. SetColour(screen,39,69,55,110)
  354. SetColour(screen,40,66,55,103)
  355. SetColour(screen,41,65,54,96)
  356. SetColour(screen,42,67,51,90)
  357. SetColour(screen,43,75,47,74)
  358. SetColour(screen,44,79,42,59)
  359. SetColour(screen,45,90,35,40)
  360. SetColour(screen,46,98,31,23)
  361. SetColour(screen,47,106,25,7)
  362. SetColour(screen,48,0,0,141)
  363. SetColour(screen,49,97,57,89)
  364. SetColour(screen,50,94,53,88)
  365. SetColour(screen,51,88,47,86)
  366. SetColour(screen,52,84,44,85)
  367. SetColour(screen,53,79,39,83)
  368. SetColour(screen,54,0,0,155)
  369. SetColour(screen,55,73,32,83)
  370. SetColour(screen,56,73,30,85)
  371. SetColour(screen,57,68,26,84)
  372. SetColour(screen,58,62,21,80)
  373. SetColour(screen,59,56,15,78)
  374. SetColour(screen,60,53,11,77)
  375. SetColour(screen,61,0,0,149)
  376. SetColour(screen,62,143,94,87)
  377. SetColour(screen,63,163,130,95)
  378. ENDPROC
  379.  
  380. PROC setcols()
  381. DEF grey=4
  382. FOR grey:=0 TO 63
  383. SetColour(screen, grey, 170, 170, 170)
  384. ENDFOR
  385. SetColour(screen,0,170,170,170)
  386. SetColour(screen,1,0,0,0)
  387. SetColour(screen,2,255,255,255)
  388. SetColour(screen,3,110,110,110)
  389. SetColour(screen,4,255,255,255)
  390. SetColour(screen,5,255,255,165)
  391. SetColour(screen,6,165,255,165)
  392. SetColour(screen,7,255,180,180)
  393. SetColour(screen,8,0,0,220)
  394. SetColour(screen,9,0,0,212)
  395. SetColour(screen,10,0,0,206)
  396. SetColour(screen,11,0,0,198)
  397. SetColour(screen,12,0,0,191)
  398. SetColour(screen,13,0,0,184)
  399. SetColour(screen,14,0,0,177)
  400. SetColour(screen,15,0,0,169)
  401. SetColour(screen,16,0,0,163)
  402. SetColour(screen,17,144,84,198)
  403. SetColour(screen,18,89,66,132)
  404. SetColour(screen,19,209,107,255)
  405. SetColour(screen,20,0,0,134)
  406. SetColour(screen,21,0,0,127)
  407. SetColour(screen,22,0,0,120)
  408. SetColour(screen,23,0,0,112)
  409. SetColour(screen,24,0,0,106)
  410. SetColour(screen,25,0,0,98)
  411. SetColour(screen,26,0,0,91)
  412. SetColour(screen,27,0,0,84)
  413. SetColour(screen,28,0,0,77)
  414. SetColour(screen,29,0,0,69)
  415. SetColour(screen,30,0,0,63)
  416. SetColour(screen,31,0,0,55)
  417. SetColour(screen,32,0,0,141)
  418. SetColour(screen,33,196,102,255)
  419. SetColour(screen,34,183,98,248)
  420. SetColour(screen,35,171,94,231)
  421. SetColour(screen,36,157,89,215)
  422. SetColour(screen,37,0,0,155)
  423. SetColour(screen,38,131,79,182)
  424. SetColour(screen,39,119,75,165)
  425. SetColour(screen,40,106,70,149)
  426. SetColour(screen,41,0,0,149)
  427. SetColour(screen,42,255,160,232)
  428. SetColour(screen,43,244,136,198)
  429. SetColour(screen,44,230,128,187)
  430. SetColour(screen,45,217,120,175)
  431. SetColour(screen,46,202,112,163)
  432. SetColour(screen,47,188,103,152)
  433. SetColour(screen,48,173,96,140)
  434. SetColour(screen,49,167,89,139)
  435. SetColour(screen,50,161,83,139)
  436. SetColour(screen,51,155,76,138)
  437. SetColour(screen,52,147,70,138)
  438. SetColour(screen,53,142,64,136)
  439. SetColour(screen,54,135,57,136)
  440. SetColour(screen,55,130,51,135)
  441. SetColour(screen,56,123,44,135)
  442. SetColour(screen,57,118,37,134)
  443. SetColour(screen,58,110,32,134)
  444. SetColour(screen,59,105,25,133)
  445. SetColour(screen,60,98,19,133)
  446. SetColour(screen,61,92,12,132)
  447. SetColour(screen,62,157,94,87)
  448. SetColour(screen,63,179,130,95)
  449. ENDPROC
  450.  
  451. PROC intrnd()
  452. DEF div
  453. timerio.io.command:=TR_GETSYSTIME
  454. DoIO(timerio)
  455. howlong:=timerio.time.secs
  456. timerio.io.command:=TR_GETSYSTIME
  457. DoIO(timerio)
  458. howlong2:=timerio.time.secs
  459. div:=howlong*2
  460. howlong:=howlong-div
  461. Rnd(howlong)
  462. ENDPROC
  463.  
  464. PROC setlines()
  465. SetColour(screen,4,col1r,col1g,col1b)
  466. SetColour(screen,5,col2r,col2g,col2b)
  467. SetColour(screen,6,col3r,col3g,col3b)
  468. SetColour(screen,7,col4r,col4g,col4b)
  469. ENDPROC
  470.  
  471. PROC gadtoolsWindow(access) HANDLE
  472.   DEF font=NIL, glist=NIL, projItem, menus, menu1, menutitle, menustrip:PTR
  473. TO menu, left=0,
  474.       my_gads[7]:ARRAY OF LONG, mysc=NIL:PTR TO screen
  475.   topaz80:=['topaz.font', 8, 0, 0]:textattr
  476.   font:=OpenFont(topaz80)
  477.   vi:=GetVisualInfoA(screen, [NIL])
  478.  
  479.   topborder:=mysc.wbortop+screen.font.ysize+1
  480.  
  481.   createAllGadgets({glist}, vi, topborder, my_gads)
  482.  
  483.   mywin:=OpenW(154, 126,141,97,IDCMP_MENUPICK OR IDCMP_VANILLAKEY OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_CLOSEWINDOW OR IDCMP_GADGETDOWN OR IDCMP_GADGETUP, WFLG_NEWLOOKMENUS OR WFLG_CLOSEGADGET OR WFLG_ACTIVATE, 'Options', screen, $F, glist, NIL)
  484. SetTopaz(8)
  485.  
  486.   menu1:=[NIL, 0, 0, 90, 10,
  487.           ITEMTEXT OR COMMSEQ OR ITEMENABLED OR HIGHCOMP, 0,
  488.           [1, 2, RP_JAM2, 3, 1, topaz80, 'About', NIL]:intuitext,
  489.           NIL, "A", NIL, NIL]:menuitem
  490.  
  491.   menu1:=[menu1, 0, 11, 90, 10,
  492.           ITEMTEXT OR COMMSEQ OR ITEMENABLED OR HIGHCOMP, 0,
  493.           [1, 2, RP_JAM2, 3, 1, topaz80, 'Quit', NIL]:intuitext,
  494.           NIL, "Q", NIL, NIL]:menuitem
  495.   
  496.  menutitle:='About'
  497.  
  498.   menustrip:=[NIL, left, 0,
  499.               TextLength(mywin.wscreen.rastport, menutitle, 10),
  500.               10, MENUENABLED, menutitle, menu1, 0, 0, 0, 0]:menu
  501.  
  502.   left:=left+menustrip.width
  503.  
  504.   SetMenuStrip(mywin, menustrip)
  505.  
  506.  
  507.   process_window_events(mywin, my_gads)
  508.  
  509.  EXCEPT DO  
  510.   ClearMenuStrip(mywin)
  511.   IF mywin THEN CloseW(mywin)
  512.   FreeGadgets(glist)
  513.   IF vi THEN FreeVisualInfo(vi)
  514.   IF font THEN CloseFont(font)
  515.   ReThrow()
  516. ENDPROC
  517.  
  518. PROC handleGadgetEvent(win, gad:PTR TO gadget, code,
  519.                        my_gads:PTR TO LONG)
  520.   DEF id
  521.   id:=gad.gadgetid
  522.  
  523.   SELECT id
  524.   CASE MYGAD_CYCLE
  525.   playerno:=playerno+1
  526.   IF playerno=5 THEN playerno:=0
  527. CASE MYGAD_BUTTON
  528. terminated:=TRUE
  529.   CASE MYGAD_BUTTON4
  530.   colourcontrol()
  531. terminated4:=FALSE
  532.   CASE MYGAD_BUTTON2
  533.   playercontrol()
  534. terminated3:=FALSE
  535.   CASE MYGAD_BUTTON5
  536.   gameprefs()
  537. terminated2:=FALSE
  538. ENDSELECT
  539. ENDPROC
  540.  
  541. PROC about()
  542. DEF build:PTR TO window, buildmsg, buildcode, endrequest1=FALSE, endrequest2=FALSE,
  543. buildgad:PTR TO gadget
  544. ghostgadgets()
  545.  
  546.  
  547. build:=BuildEasyRequestArgs(mywin,[20,0,'LightSpeed2','Coded in AmigaE by Micro Design:\n\nRichard West              (code)\nDaniel Pimley   (graphics/sound)\n\n    This program is FREEWARE\n\n       Copyright © 1998\nDaniel Pimley and Richard West', 'OK'],0,NIL)
  548.  
  549.  
  550. SetStdRast(build.rport)
  551. REPEAT
  552. Line(141,114,148,114,1)
  553. buildmsg:=WaitIMessage(build)
  554. buildcode:=MsgCode()
  555. IF (buildcode=30224) OR (buildcode=111) OR (buildcode=79) OR (buildcode=26582) THEN endrequest1:=TRUE
  556. UNTIL endrequest1=TRUE
  557. SetStdRast(mywin.rport)    
  558. FreeSysRequest(build)
  559. unghostgadgets()
  560. ENDPROC                                                              
  561.  
  562. PROC handleVanillaKey(win, code, my_gads:PTR TO LONG)
  563. SELECT code
  564. CASE -2048
  565. terminated:=TRUE
  566. quit:=9
  567. CASE -2016
  568. about()
  569. ENDSELECT
  570.   SELECT "z" OF code
  571. CASE "x", "X"
  572.   playerno:=playerno+1
  573.   IF playerno=5 THEN playerno:=0
  574. Gt_SetGadgetAttrsA(acycle,win,NIL,[GTCY_ACTIVE, playerno, GA_DISABLED, FALSE, NIL])
  575. CASE "b", "B"
  576. terminated:=TRUE
  577. CASE "p", "P"
  578. playercontrol()
  579. terminated3:=FALSE
  580. CASE "c", "C"
  581. colourcontrol()
  582. terminated4:=FALSE
  583. CASE "a", "A"
  584. about()
  585. CASE "g", "G"
  586. gameprefs()
  587. terminated2:=FALSE
  588. CASE "q", "Q"
  589. terminated:=TRUE
  590. quit:=9
  591.   ENDSELECT
  592. ENDPROC
  593.  
  594. PROC createAllGadgets(glistptr:PTR TO LONG, vi, topborder, my_gads:PTR TO LONG)  
  595. DEF gad, ng:PTR TO newgadget
  596.   gad:=CreateContext(glistptr)
  597.  
  598.    ng:=[140, (20+topborder), 200, 12, '', topaz80,
  599.         NIL, NIL, vi, 0]:newgadget
  600.  
  601.  
  602.   ng.leftedge   := 8
  603.   ng.topedge    := 15
  604.   ng.width      := 125
  605.   ng.height     := 12
  606.   ng.gadgettext := '_x:        '
  607.   ng.gadgetid   :=MYGAD_CYCLE
  608.   ng.flags      :=PLACETEXT_IN
  609.   acycle:=CreateGadgetA(CYCLE_KIND, gad, ng, [GT_UNDERSCORE, "_", GTCY_LABELS, ['  1 Player ', '  2 Players', '  3 Players', '  4 Players', 'Demo', NIL],GTCY_ACTIVE, playerno, NIL])
  610.  
  611.   ng.leftedge   := 8
  612.   ng.topedge    := 31
  613.   ng.width      := 125
  614.   ng.height     := 12
  615.   ng.gadgettext := '_Begin Game'
  616.   ng.gadgetid   := MYGAD_BUTTON
  617.   ng.flags      := 0
  618.   abutton:=CreateGadgetA(BUTTON_KIND, acycle, ng, [GT_UNDERSCORE, "_"])
  619.  
  620.   ng.leftedge   := 8
  621.   ng.topedge    := 47
  622.   ng.width      := 125
  623.   ng.height     := 12
  624.   ng.gadgettext := '_Player Control'
  625.   ng.gadgetid   := MYGAD_BUTTON2
  626.   ng.flags      := 0
  627.   abutton2:=CreateGadgetA(BUTTON_KIND, abutton, ng, [GT_UNDERSCORE, "_"])
  628.  
  629.   ng.leftedge   := 8
  630.   ng.topedge    := 63
  631.   ng.width      := 125
  632.   ng.height     := 12
  633.   ng.gadgettext := '_Colour Control'
  634.   ng.gadgetid   := MYGAD_BUTTON4
  635.   ng.flags      := 0
  636.   abutton3:=CreateGadgetA(BUTTON_KIND, abutton2, ng, [GT_UNDERSCORE, "_"])
  637.  
  638.   ng.leftedge   := 8
  639.   ng.topedge    := 79
  640.   ng.width      := 125
  641.   ng.height     := 12
  642.   ng.gadgettext := '_Game Prefs'
  643.   ng.gadgetid   := MYGAD_BUTTON5
  644.   ng.flags      := 0
  645.   abutton4:=CreateGadgetA(BUTTON_KIND, abutton3, ng, [GT_UNDERSCORE, "_"])
  646.  
  647. ENDPROC(gad)
  648.  
  649. PROC process_window_events(mywin:PTR TO window, my_gads:PTR TO LONG)
  650.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad
  651. DEF build:PTR TO window, buildmsg, buildcode, endrequest3=FALSE,
  652. buildgad:PTR TO gadget
  653.  
  654.   REPEAT
  655.     Wait(Shl(1, mywin.userport.sigbit))
  656.     WHILE (terminated=FALSE) AND (imsg:=Gt_GetIMsg(mywin.userport))
  657.       gad:=imsg.iaddress
  658.  
  659.       imsgClass:=imsg.class
  660.       imsgCode:=imsg.code
  661.  
  662.       Gt_ReplyIMsg(imsg)
  663.  
  664.       SELECT imsgClass
  665.       CASE IDCMP_GADGETDOWN
  666.         handleGadgetEvent(mywin, gad, imsgCode, my_gads)
  667.       CASE IDCMP_MOUSEMOVE
  668.         handleGadgetEvent(mywin, gad, imsgCode, my_gads)
  669.       CASE IDCMP_GADGETUP
  670.         handleGadgetEvent(mywin, gad, imsgCode, my_gads)
  671.       CASE IDCMP_CLOSEWINDOW
  672.         quit:=9
  673.         terminated:=TRUE
  674.       CASE IDCMP_VANILLAKEY
  675.         handleVanillaKey(mywin, imsgCode, my_gads)
  676.       CASE IDCMP_REFRESHWINDOW
  677.         Gt_BeginRefresh(mywin)
  678.         Gt_EndRefresh(mywin, TRUE)
  679.       CASE 256
  680.         handleVanillaKey(mywin, imsgCode, my_gads)
  681.       ENDSELECT
  682.  
  683.  
  684.     ENDWHILE
  685.   UNTIL terminated
  686. ENDPROC
  687.  
  688. PROC gameprefs() HANDLE
  689.   DEF glist2=NIL, mywin2=NIL, my_gads2[6]:ARRAY OF LONG
  690.  
  691. ghostgadgets()
  692.   createAllGadgets2({glist2}, vi, topborder, my_gads2)
  693.   mywin2:=OpenW(17,85,282,97,IDCMP_VANILLAKEY OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_GADGETDOWN OR IDCMP_GADGETUP OR SLIDERIDCMP, WFLG_ACTIVATE OR WFLG_DRAGBAR, 'Game Prefs', screen, $F, glist2, NIL)
  694. Line(266,69,273,69,1)
  695. Colour(1)
  696. TextF(8,53,'CPU Turning:')
  697. Gt_RefreshWindow(mywin2, NIL)
  698. SetTopaz(8)
  699.   process_window_events2(mywin2, my_gads2)
  700.  
  701. EXCEPT DO
  702.   IF mywin2 THEN CloseW(mywin2)
  703.   FreeGadgets(glist2)
  704.   ReThrow()
  705. unghostgadgets()
  706. stupid:=sliderb_level
  707. ENDPROC
  708.  
  709. PROC createAllGadgets2(glistptr:PTR TO LONG, vi, topborder,
  710.                       my_gads:PTR TO LONG)
  711.   DEF gad2, ng:PTR TO newgadget
  712.   gad2:=CreateContext(glistptr)
  713.  
  714.   ng:=[140, (20+topborder), 200, 12, '_Volume:   ', topaz80,
  715.         NIL, NG_HIGHLABEL, vi, 0]:newgadget
  716.  
  717.  
  718.   ng.leftedge   := 111
  719.   ng.topedge    := 15
  720.   ng.gadgettext := '_Acceleration'
  721.   ng.gadgetid   := MYGAD2_CHECKBOX
  722.   ng.flags      := 0
  723.   bcheckbox:=CreateGadgetA(CHECKBOX_KIND, gad2, ng, [GT_UNDERSCORE, "_", GTCB_CHECKED, accelaration])
  724.  
  725.   ng.leftedge   := 248
  726.   ng.topedge    := 15
  727.   ng.gadgettext := 'Dying _Lines'
  728.   ng.gadgetid   := MYGAD2_CHECKBOX3
  729.   ng.flags      := 0
  730.   bcheckbox2:=CreateGadgetA(CHECKBOX_KIND, bcheckbox, ng, [GT_UNDERSCORE, "_", GTCB_CHECKED, blocks])
  731.  
  732.   ng.leftedge   := 111
  733.   ng.topedge    := 30
  734.   ng.gadgettext := '_Obstacles'
  735.   ng.gadgetid   := MYGAD2_CHECKBOX2
  736.   ng.flags      := 0
  737.   bcheckbox3:=CreateGadgetA(CHECKBOX_KIND, bcheckbox2, ng, [GT_UNDERSCORE, "_", GTCB_CHECKED, obstacles])
  738.  
  739.   ng.leftedge   := 248
  740.   ng.topedge    := 30
  741.   ng.gadgettext := 'Screen _Wrap'
  742.   ng.gadgetid   := MYGAD2_CHECKBOX4
  743.   ng.flags      := 0
  744.   bcheckbox4:=CreateGadgetA(CHECKBOX_KIND, bcheckbox3, ng, [GT_UNDERSCORE, "_", GTCB_CHECKED, wrap])
  745.  
  746.   ng.leftedge   := 248
  747.   ng.topedge    := 45
  748.   ng.gadgettext := 'Swoos_hes'
  749.   ng.gadgetid   := MYGAD2_CHECKBOX5
  750.   ng.flags      := 0
  751.   bcheckbox5:=CreateGadgetA(CHECKBOX_KIND, bcheckbox4, ng, [GT_UNDERSCORE, "_", GTCB_CHECKED, swooshy])
  752.  
  753.   ng.leftedge   := 8
  754.   ng.topedge    := 76
  755.   ng.width      := 129
  756.   ng.height     := 15
  757.   ng.gadgettext := '_Save'
  758.   ng.gadgetid   := MYGAD2_BUTTON
  759.   ng.flags      := 0
  760.   bbutton:=CreateGadgetA(BUTTON_KIND, bcheckbox5, ng, [GT_UNDERSCORE, "_"])
  761.  
  762.   ng.leftedge   := 145
  763.   ng.topedge    := 76
  764.   ng.width      := 129
  765.   ng.height     := 15
  766.   ng.gadgettext := '_Use'
  767.   ng.gadgetid   := MYGAD2_BUTTON2
  768.   ng.flags      := 0
  769.   bbutton2:=CreateGadgetA(BUTTON_KIND, bbutton, ng, [GT_UNDERSCORE, "_"])
  770.  
  771.   ng.leftedge   := 39
  772.   ng.topedge    := 60
  773.   ng.width      := 204
  774.   ng.height     := 12
  775.   ng.gadgettext := '_T/t'
  776.   ng.gadgetid   := MYGAD2_SLIDER
  777.   ng.flags      := PLACETEXT_RIGHT
  778.   bslider:=CreateGadgetA(SLIDER_KIND, bbutton2, ng,
  779.                                     [GTSL_MIN,         20,
  780.                                      GTSL_MAX,         100,
  781.                                      GTSL_LEVEL,       sliderb_level,
  782.                                      GTSL_LEVELFORMAT, '\d[3]',
  783.                                      GTSL_MAXLEVELLEN, 10,
  784.                                      GA_DISABLED,      FALSE,
  785.                                      GT_UNDERSCORE,    "_",
  786.                                      NIL])
  787.  
  788. ENDPROC(gad2)
  789.  
  790. PROC process_window_events2(mywin2:PTR TO window, my_gads2:PTR TO LONG)
  791.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad2
  792.  
  793.   REPEAT
  794.     Wait(Shl(1, mywin2.userport.sigbit))
  795.     WHILE (terminated2=FALSE) AND (imsg:=Gt_GetIMsg(mywin2.userport))
  796.       gad2:=imsg.iaddress
  797.  
  798.       imsgClass:=imsg.class
  799.       imsgCode:=imsg.code
  800.  
  801.       Gt_ReplyIMsg(imsg)
  802.  
  803.       SELECT imsgClass
  804.       CASE IDCMP_GADGETDOWN
  805.         handleGadgetEvent2(mywin2, gad2, imsgCode, my_gads2)
  806.       CASE IDCMP_MOUSEMOVE
  807.         handleGadgetEvent2(mywin2, gad2, imsgCode, my_gads2)
  808.       CASE IDCMP_GADGETUP
  809.         handleGadgetEvent2(mywin2, gad2, imsgCode, my_gads2)
  810.       CASE IDCMP_VANILLAKEY
  811.         handleVanillaKey2(mywin2, imsgCode, my_gads2)
  812.       CASE IDCMP_REFRESHWINDOW
  813.         Gt_BeginRefresh(mywin2)
  814.         Gt_EndRefresh(mywin2, TRUE)
  815.       ENDSELECT
  816.     ENDWHILE
  817.   UNTIL terminated2
  818. ENDPROC
  819.  
  820. PROC handleGadgetEvent2(win, gad:PTR TO gadget, code,
  821.                        my_gads:PTR TO LONG)
  822.   DEF id
  823.   id:=gad.gadgetid
  824.   SELECT id
  825.   CASE MYGAD2_CHECKBOX2
  826.   IF obstacles=TRUE THEN obstacles:=FALSE ELSE obstacles:=TRUE
  827.   CASE MYGAD2_CHECKBOX
  828.   IF accelaration=TRUE THEN accelaration:=FALSE ELSE accelaration:=TRUE
  829.   CASE MYGAD2_CHECKBOX4
  830.   IF wrap=TRUE THEN wrap:=FALSE ELSE wrap:=TRUE
  831.   CASE MYGAD2_CHECKBOX5
  832.   IF swooshy=FALSE THEN swooshy:=TRUE ELSE swooshy:=FALSE
  833.   CASE MYGAD2_CHECKBOX3
  834.   IF blocks=TRUE THEN blocks:=FALSE ELSE blocks:=TRUE
  835.   CASE MYGAD2_SLIDER
  836.     sliderb_level:=code
  837.   CASE MYGAD2_BUTTON
  838. stupid:=sliderb_level
  839.   saveprefs()
  840.   terminated2:=TRUE
  841.   CASE MYGAD2_BUTTON2
  842. stupid:=sliderb_level
  843.   terminated2:=TRUE
  844.  
  845. ENDSELECT
  846. ENDPROC
  847.  
  848. PROC handleVanillaKey2(win, code, my_gads:PTR TO LONG)
  849.   SELECT "z" OF code
  850. CASE "o", "O"
  851. IF obstacles=TRUE THEN obstacles:=FALSE ELSE obstacles:=TRUE
  852. IF obstacles=FALSE
  853. Gt_SetGadgetAttrsA(bcheckbox3,win,NIL,[GTCB_CHECKED,FALSE])
  854. ELSE
  855. Gt_SetGadgetAttrsA(bcheckbox3,win,NIL,[GTCB_CHECKED,TRUE])
  856. ENDIF
  857. CASE "a", "A"
  858. IF accelaration=TRUE THEN accelaration:=FALSE ELSE accelaration:=TRUE
  859. IF accelaration=FALSE
  860. Gt_SetGadgetAttrsA(bcheckbox,win,NIL,[GTCB_CHECKED,FALSE])
  861. ELSE
  862. Gt_SetGadgetAttrsA(bcheckbox,win,NIL,[GTCB_CHECKED,TRUE])
  863. ENDIF
  864. CASE "w", "W"
  865. IF wrap=TRUE THEN wrap:=FALSE ELSE wrap:=TRUE
  866. IF wrap=FALSE
  867. Gt_SetGadgetAttrsA(bcheckbox4,win,NIL,[GTCB_CHECKED,FALSE])
  868. ELSE
  869. Gt_SetGadgetAttrsA(bcheckbox4,win,NIL,[GTCB_CHECKED,TRUE])
  870. ENDIF
  871. CASE "h", "H"
  872. IF swooshy=FALSE THEN swooshy:=TRUE ELSE swooshy:=FALSE
  873. IF swooshy=FALSE
  874. Gt_SetGadgetAttrsA(bcheckbox5,win,NIL,[GTCB_CHECKED,FALSE])
  875. ELSE
  876. Gt_SetGadgetAttrsA(bcheckbox5,win,NIL,[GTCB_CHECKED,TRUE])
  877. ENDIF
  878. CASE "l", "L"
  879. IF blocks=TRUE THEN blocks:=FALSE ELSE blocks:=TRUE
  880. IF blocks=0
  881. Gt_SetGadgetAttrsA(bcheckbox2,win,NIL,[GTCB_CHECKED,FALSE])
  882. ELSE
  883. Gt_SetGadgetAttrsA(bcheckbox2,win,NIL,[GTCB_CHECKED,TRUE])
  884. ENDIF
  885.  
  886.   CASE "T"
  887. IF sliderb_level<100 THEN sliderb_level:=sliderb_level+1
  888.     Gt_SetGadgetAttrsA(bslider, win, NIL,
  889.                       [GTSL_LEVEL, sliderb_level, NIL])
  890.  
  891.   CASE "t"
  892. IF sliderb_level>20 THEN sliderb_level:=sliderb_level-1    
  893. Gt_SetGadgetAttrsA(bslider, win, NIL,
  894.                       [GTSL_LEVEL, sliderb_level, NIL])
  895.  
  896.  
  897. CASE "s", "S"
  898. stupid:=sliderb_level
  899. saveprefs()
  900.   terminated2:=TRUE
  901. CASE "u", "U"
  902. stupid:=sliderb_level
  903. terminated2:=TRUE
  904.   ENDSELECT
  905. ENDPROC
  906.  
  907. PROC playercontrol() HANDLE
  908.   DEF glist3=NIL, mywin3=NIL, my_gads3[6]:ARRAY OF LONG
  909.  
  910. ghostgadgets()
  911.  
  912. createAllGadgets3({glist3}, vi, topborder, my_gads3)
  913.   mywin3:=OpenW(0,26,320,100,IDCMP_VANILLAKEY OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_GADGETDOWN OR IDCMP_GADGETUP, WFLG_ACTIVATE OR WFLG_DRAGBAR, 'Player Control', screen, $F, glist3, NIL)
  914. SetTopaz(8)
  915.  
  916.   process_window_events3(mywin3, my_gads3)
  917.  
  918. EXCEPT DO  
  919. IF mywin3 THEN CloseW(mywin3)
  920.   FreeGadgets(glist3)
  921.   ReThrow()
  922. unghostgadgets()
  923. ENDPROC
  924.  
  925. PROC createAllGadgets3(glistptr:PTR TO LONG, vi, topborder,
  926.                       my_gads:PTR TO LONG)
  927.   DEF gad3, ng:PTR TO newgadget
  928.   gad3:=CreateContext(glistptr)
  929.  
  930.   ng:=[140, (20+topborder), 200, 12, '_Volume:   ', topaz80,
  931.        NIL, NG_HIGHLABEL, vi, 0]:newgadget
  932.  
  933.  
  934.   ng.leftedge   := 72
  935.   ng.topedge    := 15
  936.   ng.width      := 110
  937.   ng.height     := 12
  938.   ng.gadgettext := 'P_ort #2'
  939.   ng.gadgetid   :=MYGAD3_CYCLE
  940.   ng.flags      := 0
  941.   ccycle:=CreateGadgetA(CYCLE_KIND, gad3, ng, [GTCY_ACTIVE, play1control, GT_UNDERSCORE, "_", GTCY_LABELS, ['Player 1', 'Player 2', 'Player 3', 'Player 4', NIL],NIL])
  942.  
  943.   ng.leftedge   := 72
  944.   ng.topedge    := 31
  945.   ng.width      := 110
  946.   ng.height     := 12
  947.   ng.gadgettext := 'Po_rt #1'
  948.   ng.gadgetid   :=MYGAD3_CYCLE2
  949.   ng.flags      := 0
  950.   ccycle2:=CreateGadgetA(CYCLE_KIND, ccycle, ng, [GTCY_ACTIVE, play2control, GT_UNDERSCORE, "_", GTCY_LABELS, ['Player 1', 'Player 2', 'Player 3', 'Player 4', NIL],NIL])
  951.  
  952.   ng.leftedge   := 72
  953.   ng.topedge    := 47
  954.   ng.width      := 110
  955.   ng.height     := 12
  956.   ng.gadgettext := '_Cursors'
  957.   ng.gadgetid   :=MYGAD3_CYCLE3
  958.   ng.flags      := 0
  959.   ccycle3:=CreateGadgetA(CYCLE_KIND, ccycle2, ng, [GTCY_ACTIVE, play3control, GT_UNDERSCORE, "_", GTCY_LABELS, ['Player 1', 'Player 2', 'Player 3', 'Player 4', NIL], NIL])
  960.  
  961.   ng.leftedge   := 72
  962.   ng.topedge    := 63
  963.   ng.width      := 110
  964.   ng.height     := 12
  965.   ng.gadgettext := '_Q-A-Z-X'
  966.   ng.gadgetid   :=MYGAD3_CYCLE4
  967.   ng.flags      := 0
  968.   ccycle4:=CreateGadgetA(CYCLE_KIND, ccycle3, ng, [GTCY_ACTIVE, play4control, GT_UNDERSCORE, "_", GTCY_LABELS, ['Player 1', 'Player 2', 'Player 3', 'Player 4', NIL],NIL])
  969.  
  970.   ng.leftedge   := 8
  971.   ng.topedge    := 79
  972.   ng.width      :=150
  973.   ng.height     := 15
  974.   ng.gadgettext := '_Save'
  975.   ng.gadgetid   := MYGAD3_BUTTON
  976.   ng.flags      := 0
  977.   cbutton:=CreateGadgetA(BUTTON_KIND, ccycle4, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  978.  
  979.   ng.leftedge   := 162
  980.   ng.topedge    := 79
  981.   ng.width      := 150
  982.   ng.height     := 15
  983.   ng.gadgettext := '_Use'
  984.   ng.gadgetid   := MYGAD3_BUTTON2
  985.   ng.flags      := 0
  986.   cbutton2:=CreateGadgetA(BUTTON_KIND, cbutton, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  987.  
  988.   ng.leftedge   := 236
  989.   ng.topedge    := 15
  990.   ng.width      := 76
  991.   ng.height     := 12
  992.   ng.gadgettext := '_Name:'
  993.   ng.gadgetid   :=MYGAD3_STRING
  994.   ng.flags      := 0
  995.   cstring:=CreateGadgetA(STRING_KIND, cbutton2, ng, [GTST_STRING, tname1, GTST_MAXCHARS, 7, GT_UNDERSCORE, "_", NIL])
  996.  
  997.   ng.leftedge   := 236
  998.   ng.topedge    := 31
  999.   ng.width      := 76
  1000.   ng.height     := 12
  1001.   ng.gadgettext := 'N_ame:'
  1002.   ng.gadgetid   :=MYGAD3_STRING2
  1003.   ng.flags      := 0
  1004.   cstring2:=CreateGadgetA(STRING_KIND, cstring, ng, [GTST_STRING, tname2, GTST_MAXCHARS, 7, GT_UNDERSCORE, "_", NIL])
  1005.  
  1006.   ng.leftedge   := 236
  1007.   ng.topedge    := 47
  1008.   ng.width      := 76
  1009.   ng.height     := 12
  1010.   ng.gadgettext := 'Na_me:'
  1011.   ng.gadgetid   :=MYGAD3_STRING3
  1012.   ng.flags      := 0
  1013.   cstring3:=CreateGadgetA(STRING_KIND, cstring2, ng, [GTST_STRING, tname3, GTST_MAXCHARS, 7, GT_UNDERSCORE, "_", NIL])
  1014.  
  1015.  
  1016.   ng.leftedge   := 236
  1017.   ng.topedge    := 63
  1018.   ng.width      := 76
  1019.   ng.height     := 12
  1020.   ng.gadgettext := 'Nam_e:'
  1021.   ng.gadgetid   :=MYGAD3_STRING4
  1022.   ng.flags      := 0
  1023.   cstring4:=CreateGadgetA(STRING_KIND, cstring3, ng, [GTST_STRING, tname4, GTST_MAXCHARS, 7, GT_UNDERSCORE, "_", NIL])
  1024.  
  1025.  
  1026. ENDPROC(gad3)
  1027.  
  1028. PROC process_window_events3(mywin3:PTR TO window, my_gads3:PTR TO LONG)
  1029.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad3
  1030.  
  1031.   REPEAT
  1032.     Wait(Shl(1, mywin3.userport.sigbit))
  1033.     WHILE (terminated3=FALSE) AND (imsg:=Gt_GetIMsg(mywin3.userport))
  1034.       gad3:=imsg.iaddress
  1035.  
  1036.       imsgClass:=imsg.class
  1037.       imsgCode:=imsg.code
  1038.  
  1039.       Gt_ReplyIMsg(imsg)
  1040.  
  1041.       SELECT imsgClass
  1042.       CASE IDCMP_GADGETDOWN
  1043.         handleGadgetEvent3(mywin3, gad3, imsgCode, my_gads3)
  1044.       CASE IDCMP_MOUSEMOVE
  1045.         handleGadgetEvent3(mywin3, gad3, imsgCode, my_gads3)
  1046.       CASE IDCMP_GADGETUP
  1047.   StringF(tname1,'\s', cstring.specialinfo::stringinfo.buffer)
  1048.   StringF(tname2,'\s', cstring2.specialinfo::stringinfo.buffer)
  1049.   StringF(tname3,'\s', cstring3.specialinfo::stringinfo.buffer)
  1050.   StringF(tname4,'\s', cstring4.specialinfo::stringinfo.buffer)
  1051.         handleGadgetEvent3(mywin3, gad3, imsgCode, my_gads3)
  1052.       CASE IDCMP_VANILLAKEY
  1053.         handleVanillaKey3(mywin3, imsgCode, my_gads3)
  1054.       CASE IDCMP_REFRESHWINDOW
  1055.         Gt_BeginRefresh(mywin3)
  1056.         Gt_EndRefresh(mywin3, TRUE)
  1057.       ENDSELECT
  1058.  
  1059. IF noterminate3=5
  1060. Gt_SetGadgetAttrsA(cbutton2,mywin3,cbutton2,[GA_DISABLED, TRUE])
  1061. Gt_SetGadgetAttrsA(cbutton,mywin3,cbutton,[GA_DISABLED, TRUE])
  1062. ELSE
  1063. Gt_SetGadgetAttrsA(cbutton,mywin3,cbutton,[GA_DISABLED, FALSE])
  1064. Gt_SetGadgetAttrsA(cbutton2,mywin3,cbutton2,[GA_DISABLED, FALSE])
  1065. ENDIF       
  1066.          
  1067.     ENDWHILE
  1068.   UNTIL terminated3
  1069. ENDPROC
  1070.  
  1071. PROC handleGadgetEvent3(win, gad:PTR TO gadget, code,
  1072.                        my_gads:PTR TO LONG)
  1073.   DEF id
  1074.  
  1075.   id:=gad.gadgetid
  1076.  
  1077.   SELECT id
  1078. CASE MYGAD3_CYCLE
  1079. play1control:=play1control+1
  1080. IF play1control=4 THEN play1control:=0
  1081. CASE MYGAD3_CYCLE2
  1082. play2control:=play2control+1
  1083. IF play2control=4 THEN play2control:=0
  1084. CASE MYGAD3_CYCLE3
  1085. play3control:=play3control+1
  1086. IF play3control=4 THEN play3control:=0
  1087. CASE MYGAD3_CYCLE4
  1088. play4control:=play4control+1
  1089. IF play4control=4 THEN play4control:=0
  1090.   CASE MYGAD3_BUTTON
  1091. saveprefs()
  1092.   terminated3:=TRUE
  1093.    CASE MYGAD3_BUTTON2
  1094.   terminated3:=TRUE
  1095. ENDSELECT
  1096. IF (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN noterminate3:=5 ELSE noterminate3:=0
  1097. ENDPROC
  1098.  
  1099. PROC handleVanillaKey3(win, code, my_gads:PTR TO LONG)
  1100.   SELECT "z" OF code
  1101. CASE "o", "O"
  1102. play1control:=play1control+1
  1103. IF play1control=4 THEN play1control:=0
  1104. IF play1control=0 THEN Gt_SetGadgetAttrsA(ccycle,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 0])
  1105. IF play1control=1 THEN Gt_SetGadgetAttrsA(ccycle,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 1])
  1106. IF play1control=2 THEN Gt_SetGadgetAttrsA(ccycle,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 2])
  1107. IF play1control=3 THEN Gt_SetGadgetAttrsA(ccycle,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 3])
  1108. IF (play1control=play2control) OR (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN noterminate3:=5 ELSE noterminate3:=0
  1109. CASE "r", "R"
  1110. play2control:=play2control+1
  1111. IF play2control=4 THEN play2control:=0
  1112. IF play2control=0 THEN Gt_SetGadgetAttrsA(ccycle2,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 0])
  1113. IF play2control=1 THEN Gt_SetGadgetAttrsA(ccycle2,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 1])
  1114. IF play2control=2 THEN Gt_SetGadgetAttrsA(ccycle2,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 2])
  1115. IF play2control=3 THEN Gt_SetGadgetAttrsA(ccycle2,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 3])
  1116. IF (play1control=play2control) OR (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN noterminate3:=5 ELSE noterminate3:=0
  1117. CASE "c", "C"
  1118. play3control:=play3control+1
  1119. IF play3control=4 THEN play3control:=0
  1120. IF play3control=0 THEN Gt_SetGadgetAttrsA(ccycle3,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 0])
  1121. IF play3control=1 THEN Gt_SetGadgetAttrsA(ccycle3,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 1])
  1122. IF play3control=2 THEN Gt_SetGadgetAttrsA(ccycle3,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 2])
  1123. IF play3control=3 THEN Gt_SetGadgetAttrsA(ccycle3,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 3])
  1124. IF (play1control=play2control) OR (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN noterminate3:=5 ELSE noterminate3:=0
  1125. CASE "q", "Q"
  1126. play4control:=play4control+1
  1127. IF play4control=4 THEN play4control:=0
  1128. IF play4control=0 THEN Gt_SetGadgetAttrsA(ccycle4,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 0])
  1129. IF play4control=1 THEN Gt_SetGadgetAttrsA(ccycle4,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 1])
  1130. IF play4control=2 THEN Gt_SetGadgetAttrsA(ccycle4,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 2])
  1131. IF play4control=3 THEN Gt_SetGadgetAttrsA(ccycle4,win,NIL,[GA_DISABLED, FALSE, GTCY_ACTIVE, 3])
  1132. IF (play1control=play2control) OR (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN noterminate3:=5 ELSE noterminate3:=0
  1133. CASE "s", "S"
  1134. IF noterminate3=0
  1135.   terminated3:=TRUE
  1136. saveprefs()
  1137. ENDIF
  1138. CASE "u", "U"
  1139. IF noterminate3=0 THEN terminated3:=TRUE
  1140. CASE "n", "N"
  1141. ActivateGadget(cstring,win,NIL)
  1142. CASE "a", "A"
  1143. ActivateGadget(cstring2,win,NIL)
  1144. CASE "m", "M"
  1145. ActivateGadget(cstring3,win,NIL)
  1146. CASE "e", "E"
  1147. ActivateGadget(cstring4,win,NIL)
  1148.   ENDSELECT
  1149. ENDPROC
  1150.  
  1151. PROC colourcontrol() HANDLE
  1152.   DEF glist4=NIL, my_gads4[9]:ARRAY OF LONG
  1153. sactive:=1
  1154. slider_levela:=col1r
  1155. slider_levelb:=col1g
  1156. slider_levelc:=col1b
  1157. ghostgadgets()
  1158.  
  1159. createAllGadgets4({glist4}, vi, topborder, my_gads4)  
  1160. mywin4:=OpenW(71,35,178,137,IDCMP_VANILLAKEY OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_GADGETDOWN OR IDCMP_GADGETUP OR SLIDERIDCMP, WFLG_ACTIVATE OR WFLG_DRAGBAR, 'Colour Control', screen, $F, glist4, NIL)
  1161. SetTopaz(8) 
  1162. Gt_RefreshWindow(mywin4, NIL)
  1163. setlines()
  1164. drawcols()
  1165.  process_window_events4(mywin4, my_gads4)
  1166.  
  1167. EXCEPT DO  
  1168. IF mywin4 THEN CloseW(mywin4)
  1169.   FreeGadgets(glist4)
  1170.   ReThrow()
  1171. unghostgadgets()
  1172. ENDPROC
  1173.  
  1174. PROC createAllGadgets4(glistptr:PTR TO LONG, vi, topborder,
  1175.                       my_gads:PTR TO LONG)
  1176.   DEF ng:PTR TO newgadget
  1177.   gad4:=CreateContext(glistptr)
  1178.  
  1179.   ng:=[40, 20, 80, 12, '', topaz80,
  1180.        NIL, NIL, vi, 0]:newgadget
  1181.  
  1182.   ng.leftedge   := 39
  1183.   ng.topedge    := 68
  1184.   ng.width      := 100
  1185.   ng.height     := 12
  1186.   ng.gadgettext := '_R/r'
  1187.   ng.gadgetid   := MYGAD_SLIDER
  1188.   ng.flags      := PLACETEXT_RIGHT
  1189.   gad4:=CreateGadgetA(SLIDER_KIND, gad4, ng,
  1190.                                     [GTSL_MIN,         SLIDER_MIN,
  1191.                                      GTSL_MAX,         SLIDER_MAX,
  1192.                                      GTSL_LEVEL,       slider_levela,
  1193.                                      GTSL_LEVELFORMAT, '\d[3]',
  1194.                                      GTSL_MAXLEVELLEN, 10,
  1195.                                      GA_DISABLED,      FALSE,
  1196.                                      GT_UNDERSCORE,    "_",
  1197.                                      NIL])
  1198.  
  1199.   ng.leftedge   := 39
  1200.   ng.topedge    := 84
  1201.   ng.width      := 100
  1202.   ng.height     := 12
  1203.   ng.gadgettext := '_G/g'
  1204.   ng.gadgetid   := MYGAD_SLIDER2
  1205.   ng.flags      := PLACETEXT_RIGHT
  1206.   dslider2:=CreateGadgetA(SLIDER_KIND, gad4, ng,
  1207.                                     [GTSL_MIN,         SLIDER_MIN,
  1208.                                      GTSL_MAX,         SLIDER_MAX,
  1209.                                      GTSL_LEVEL,       slider_levelb,
  1210.                                      GTSL_LEVELFORMAT, '\d[3]',
  1211.                                      GTSL_MAXLEVELLEN, 10,
  1212.                                      GA_DISABLED,      FALSE,
  1213.                                      GT_UNDERSCORE,    "_",
  1214.                                      NIL])
  1215.  
  1216.   ng.leftedge   := 39
  1217.   ng.topedge    := 100
  1218.   ng.width      := 100
  1219.   ng.height     := 12
  1220.   ng.gadgettext := '_B/b'
  1221.   ng.gadgetid   := MYGAD_SLIDER3
  1222.   ng.flags      := PLACETEXT_RIGHT
  1223.   dslider3:=CreateGadgetA(SLIDER_KIND, dslider2, ng,
  1224.                                     [GTSL_MIN,         SLIDER_MIN,
  1225.                                      GTSL_MAX,         SLIDER_MAX,
  1226.                                      GTSL_LEVEL,       slider_levelc,
  1227.                                      GTSL_LEVELFORMAT, '\d[3]',
  1228.                                      GTSL_MAXLEVELLEN, 10,
  1229.                                      GA_DISABLED,      FALSE,
  1230.                                      GT_UNDERSCORE,    "_",
  1231.                                      NIL])
  1232.  
  1233.   ng.leftedge   := 8
  1234.   ng.topedge    := 116
  1235.   ng.width      := 79
  1236.   ng.height     := 15
  1237.   ng.gadgettext := '_Save'
  1238.   ng.gadgetid   := MYGAD4_BUTTON
  1239.   ng.flags      := 0
  1240.   dbutton:=CreateGadgetA(BUTTON_KIND, dslider3, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1241.  
  1242.   ng.leftedge   := 91
  1243.   ng.topedge    := 116
  1244.   ng.width      := 79
  1245.   ng.height     := 15
  1246.   ng.gadgettext := '_Use'
  1247.   ng.gadgetid   := MYGAD4_BUTTON2
  1248.   ng.flags      := 0
  1249.   dbutton2:=CreateGadgetA(BUTTON_KIND, dbutton, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1250.  
  1251.   ng.leftedge   := 20
  1252.   ng.topedge    := 52
  1253.   ng.width      := 21
  1254.   ng.height     := 12
  1255.   ng.gadgettext := '_1'
  1256.   ng.gadgetid   := MYGAD4_BUTTON3
  1257.   ng.flags      := 0
  1258.   dbutton3:=CreateGadgetA(BUTTON_KIND, dbutton2, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1259.  
  1260.   ng.leftedge   := 58
  1261.   ng.topedge    := 52
  1262.   ng.width      := 21
  1263.   ng.height     := 12
  1264.   ng.gadgettext := '_2'
  1265.   ng.gadgetid   := MYGAD4_BUTTON4
  1266.   ng.flags      := 0
  1267.   dbutton4:=CreateGadgetA(BUTTON_KIND, dbutton3, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1268.  
  1269.   ng.leftedge   := 98
  1270.   ng.topedge    := 52
  1271.   ng.width      := 21
  1272.   ng.height     := 12
  1273.   ng.gadgettext := '_3'
  1274.   ng.gadgetid   := MYGAD4_BUTTON5
  1275.   ng.flags      := 0
  1276.   dbutton5:=CreateGadgetA(BUTTON_KIND, dbutton4, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1277.  
  1278.   ng.leftedge   := 138
  1279.   ng.topedge    := 52
  1280.   ng.width      := 21
  1281.   ng.height     := 12
  1282.   ng.gadgettext := '_4'
  1283.   ng.gadgetid   := MYGAD4_BUTTON6
  1284.   ng.flags      := 0
  1285.   dbutton6:=CreateGadgetA(BUTTON_KIND, dbutton5, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1286.  
  1287. ENDPROC(gad4)
  1288.  
  1289. PROC process_window_events4(mywin4:PTR TO window, my_gads4:PTR TO LONG)
  1290.  
  1291.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad4
  1292.  
  1293.   REPEAT
  1294.     Wait(Shl(1, mywin4.userport.sigbit))
  1295.     WHILE (terminated4=FALSE) AND (imsg:=Gt_GetIMsg(mywin4.userport))
  1296.       gad4:=imsg.iaddress
  1297.  
  1298.       imsgClass:=imsg.class
  1299.       imsgCode:=imsg.code
  1300.  
  1301.       Gt_ReplyIMsg(imsg)
  1302.  
  1303.       SELECT imsgClass
  1304.       CASE IDCMP_GADGETDOWN
  1305.         handleGadgetEvent4(mywin4, gad4, imsgCode, my_gads4)
  1306.       CASE IDCMP_MOUSEMOVE
  1307.         handleGadgetEvent4(mywin4, gad4, imsgCode, my_gads4)
  1308.       CASE IDCMP_GADGETUP
  1309.         handleGadgetEvent4(mywin4, gad4, imsgCode, my_gads4)
  1310.       CASE IDCMP_VANILLAKEY
  1311.         handleVanillaKey4(mywin4, imsgCode, my_gads4)
  1312.       CASE IDCMP_REFRESHWINDOW
  1313.         Gt_BeginRefresh(mywin4)
  1314.         Gt_EndRefresh(mywin4, TRUE)
  1315.       ENDSELECT
  1316. SetColour(screen,4,col1r,col1g,col1b)
  1317. SetColour(screen,5,col2r,col2g,col2b)
  1318. SetColour(screen,6,col3r,col3g,col3b)
  1319. SetColour(screen,7,col4r,col4g,col4b)
  1320.  
  1321.  ENDWHILE
  1322.   UNTIL terminated4
  1323. ENDPROC
  1324.  
  1325. PROC handleGadgetEvent4(win, gad:PTR TO gadget, code,
  1326.                        my_gads:PTR TO LONG)
  1327.   DEF id
  1328. IF sactive=1 THEN (col1r:=slider_levela) AND (col1g:=slider_levelb) AND (col1b:=slider_levelc)
  1329. IF sactive=2 THEN (col2r:=slider_levela) AND (col2g:=slider_levelb) AND (col2b:=slider_levelc)
  1330. IF sactive=3 THEN (col3r:=slider_levela) AND (col3g:=slider_levelb) AND (col3b:=slider_levelc)
  1331. IF sactive=4 THEN (col4r:=slider_levela) AND (col4g:=slider_levelb) AND (col4b:=slider_levelc)
  1332.   id:=gad.gadgetid
  1333.   SELECT id
  1334. CASE MYGAD4_BUTTON3
  1335. sactive:=1
  1336. slider_levela:=col1r
  1337. slider_levelb:=col1g
  1338. slider_levelc:=col1b
  1339.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1340.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1341.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1342.   DrawBorder(mywin4.rport, shadowBorder, 12, 15)
  1343.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1344.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1345.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1346. CASE MYGAD4_BUTTON4
  1347. sactive:=2
  1348. slider_levela:=col2r
  1349. slider_levelb:=col2g
  1350. slider_levelc:=col2b
  1351.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1352.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1353.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1354.   DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1355.   DrawBorder(mywin4.rport, shadowBorder, 52, 15)
  1356.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1357.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1358. CASE MYGAD4_BUTTON5
  1359. sactive:=3
  1360. slider_levela:=col3r
  1361. slider_levelb:=col3g
  1362. slider_levelc:=col3b
  1363.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1364.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1365.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1366.     DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1367.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1368.   DrawBorder(mywin4.rport, shadowBorder, 92, 15)
  1369.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1370. CASE MYGAD4_BUTTON6
  1371. sactive:=4
  1372. slider_levela:=col4r
  1373. slider_levelb:=col4g
  1374. slider_levelc:=col4b
  1375.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1376.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1377.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1378.   
  1379.     DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1380.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1381.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1382.   DrawBorder(mywin4.rport, shadowBorder, 132, 15)
  1383.  
  1384.    CASE MYGAD4_BUTTON
  1385. saveprefs()
  1386.   terminated4:=TRUE
  1387. CASE MYGAD4_BUTTON2
  1388.   terminated4:=TRUE
  1389.   CASE MYGAD_SLIDER
  1390. slider_levela:=code
  1391.   CASE MYGAD_SLIDER2
  1392. slider_levelb:=code
  1393.   CASE MYGAD_SLIDER3
  1394.     slider_levelc:=code
  1395.   ENDSELECT
  1396. ENDPROC
  1397.  
  1398. PROC handleVanillaKey4(win, code, my_gads:PTR TO LONG)
  1399. IF sactive=1 THEN (col1r:=slider_levela) AND (col1g:=slider_levelb) AND (col1b:=slider_levelc)
  1400. IF sactive=2 THEN (col2r:=slider_levela) AND (col2g:=slider_levelb) AND (col2b:=slider_levelc)
  1401. IF sactive=3 THEN (col3r:=slider_levela) AND (col3g:=slider_levelb) AND (col3b:=slider_levelc)
  1402. IF sactive=4 THEN (col4r:=slider_levela) AND (col4g:=slider_levelb) AND (col4b:=slider_levelc)
  1403.   SELECT "w" OF code
  1404.   CASE "R"
  1405. IF slider_levela<255 THEN slider_levela:=slider_levela+1
  1406.     Gt_SetGadgetAttrsA(gad4, mywin4, NIL,
  1407.                       [GTSL_LEVEL, slider_levela, NIL])
  1408.  
  1409.   CASE "r"
  1410. IF slider_levela>0 THEN slider_levela:=slider_levela-1    
  1411. Gt_SetGadgetAttrsA(gad4, mywin4, NIL,
  1412.                       [GTSL_LEVEL, slider_levela, NIL])
  1413.  
  1414.   CASE "G"
  1415. IF slider_levelb<255 THEN slider_levelb:=slider_levelb+1
  1416.     Gt_SetGadgetAttrsA(dslider2, mywin4, NIL,
  1417.                       [GTSL_LEVEL, slider_levelb, NIL])
  1418.  
  1419.   CASE "g"
  1420. IF slider_levelb>0 THEN slider_levelb:=slider_levelb-1    
  1421.     Gt_SetGadgetAttrsA(dslider2, mywin4, NIL,
  1422.                       [GTSL_LEVEL, slider_levelb, NIL])
  1423.  
  1424.   CASE "B"
  1425. IF slider_levelc<255 THEN slider_levelc:=slider_levelc+1
  1426.     Gt_SetGadgetAttrsA(dslider3, mywin4, NIL,
  1427.                       [GTSL_LEVEL, slider_levelc, NIL])
  1428.   CASE "b"
  1429. IF slider_levelc>0 THEN slider_levelc:=slider_levelc-1    
  1430.     Gt_SetGadgetAttrsA(dslider3, mywin4, NIL,
  1431.                       [GTSL_LEVEL, slider_levelc, NIL])
  1432.  
  1433. CASE "s", "S"
  1434.   terminated4:=TRUE
  1435. saveprefs()
  1436. CASE "u", "U"
  1437. terminated4:=TRUE
  1438. CASE "1"
  1439. sactive:=1
  1440. slider_levela:=col1r
  1441. slider_levelb:=col1g
  1442. slider_levelc:=col1b
  1443.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1444.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1445.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1446.   
  1447.     DrawBorder(mywin4.rport, shadowBorder, 12, 15)
  1448.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1449.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1450.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1451. CASE "2"
  1452. sactive:=2
  1453. slider_levela:=col2r
  1454. slider_levelb:=col2g
  1455. slider_levelc:=col2b
  1456.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1457.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1458.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1459.     DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1460.   DrawBorder(mywin4.rport, shadowBorder, 52, 15)
  1461.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1462.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1463.   
  1464. CASE "3"
  1465. sactive:=3
  1466. slider_levela:=col3r
  1467. slider_levelb:=col3g
  1468. slider_levelc:=col3b
  1469.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1470.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1471.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1472.   
  1473.     DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1474.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1475.   DrawBorder(mywin4.rport, shadowBorder, 92, 15)
  1476.   DrawBorder(mywin4.rport, shadowBorderC, 132, 15)
  1477. CASE "4"
  1478. sactive:=4
  1479. slider_levela:=col4r
  1480. slider_levelb:=col4g
  1481. slider_levelc:=col4b
  1482.  Gt_SetGadgetAttrsA(gad4, mywin4, NIL, [GTSL_LEVEL, slider_levela, NIL])
  1483.  Gt_SetGadgetAttrsA(dslider2, mywin4, NIL, [GTSL_LEVEL, slider_levelb, NIL])
  1484.  Gt_SetGadgetAttrsA(dslider3, mywin4, NIL, [GTSL_LEVEL, slider_levelc, NIL])
  1485.   
  1486.     DrawBorder(mywin4.rport, shadowBorderC, 12, 15)
  1487.   DrawBorder(mywin4.rport, shadowBorderC, 52, 15)
  1488.   DrawBorder(mywin4.rport, shadowBorderC, 92, 15)
  1489.   DrawBorder(mywin4.rport, shadowBorder, 132, 15)
  1490.  
  1491.   ENDSELECT
  1492. ENDPROC
  1493.  
  1494. PROC scorecard() HANDLE
  1495.   DEF glist5=NIL, mywin5=NIL:PTR TO window, my_gads5[6]:ARRAY OF LONG,
  1496.   gad5y1=28, lineloop5, posloop=0,
  1497. posfound=4, rank1, rank2, rank3, rank4, play[3]:STRING, 
  1498.  p1x1=53, p1x2, p2x1=53, p2x2, p3x1=53, p3x2, p4x1=53, p4x2
  1499.   createAllGadgets5({glist5}, vi, topborder, my_gads5)
  1500.   mywin5:=OpenW(77,53,164,113,IDCMP_VANILLAKEY OR IDCMP_REFRESHWINDOW OR BUTTONIDCMP OR IDCMP_GADGETDOWN OR IDCMP_GADGETUP, WFLG_ACTIVATE OR WFLG_DRAGBAR, 'Score Card', screen, $F, glist5, NIL)
  1501.   SetTopaz(8)
  1502. blocked5:=FALSE
  1503. FOR lineloop5:=1 TO 4
  1504. Line(33,gad5y1+1,33,gad5y1+10,1)
  1505. Line(32,gad5y1+1,32,gad5y1+11,1)
  1506. Line(32,gad5y1,110,gad5y1,1)
  1507. Line(110,gad5y1+1,110,gad5y1+10,2)
  1508. Line(111,gad5y1,111,gad5y1+10,2)
  1509. Line(33,gad5y1+11,111,gad5y1+11,2)
  1510.  
  1511. Line(117,gad5y1+1,117,gad5y1+10,1)
  1512. Line(116,gad5y1+1,116,gad5y1+11,1)
  1513. Line(116,gad5y1,154,gad5y1,1)
  1514. Line(154,gad5y1+1,154,gad5y1+10,2)
  1515. Line(155,gad5y1,155,gad5y1+10,2)
  1516. Line(117,gad5y1+11,155,gad5y1+11,2)
  1517. gad5y1:=gad5y1+16
  1518. ENDFOR
  1519.  
  1520. Colour(2)
  1521. TextF(7,22,'Pos')
  1522. TextF(48,22,'Player')
  1523. TextF(121,22,'Wins')
  1524. Colour(1)
  1525. TextF(11,36,'1:')
  1526. TextF(11,52,'2:')
  1527. TextF(11,68,'3:')
  1528. TextF(11,84,'4:')
  1529.  
  1530. Colour(3)
  1531. REPEAT
  1532. IF posloop=play4 THEN (rank4:=posfound) AND (posfound:=posfound-1)
  1533. IF posloop=play3 THEN (rank3:=posfound) AND (posfound:=posfound-1)
  1534. IF posloop=play2 THEN (rank2:=posfound) AND (posfound:=posfound-1)
  1535. IF posloop=play1 THEN (rank1:=posfound) AND (posfound:=posfound-1)
  1536. posloop:=posloop+1
  1537. UNTIL (posfound=0) OR (posloop=1000)
  1538.  
  1539. IF posloop=1000 THEN (blocked5:=TRUE) AND (Gt_SetGadgetAttrsA(ebutton, mywin5, NIL, [GA_DISABLED, TRUE, NIL]))
  1540. IF StrLen(name1)=7 THEN p1x1:=45
  1541. IF StrLen(name2)=7 THEN p2x1:=45
  1542. IF StrLen(name3)=7 THEN p3x1:=45
  1543. IF StrLen(name4)=7 THEN p4x1:=45
  1544. IF StrLen(name1)=6 THEN p1x1:=49
  1545. IF StrLen(name2)=6 THEN p2x1:=49
  1546. IF StrLen(name3)=6 THEN p3x1:=49
  1547. IF StrLen(name4)=6 THEN p4x1:=49
  1548. IF StrLen(name1)=5 THEN p1x1:=53
  1549. IF StrLen(name2)=5 THEN p2x1:=53
  1550. IF StrLen(name3)=5 THEN p3x1:=53
  1551. IF StrLen(name4)=5 THEN p4x1:=53
  1552. IF StrLen(name1)=4 THEN p1x1:=57
  1553. IF StrLen(name2)=4 THEN p2x1:=57
  1554. IF StrLen(name3)=4 THEN p3x1:=57
  1555. IF StrLen(name4)=4 THEN p4x1:=57
  1556. IF StrLen(name1)=3 THEN p1x1:=61
  1557. IF StrLen(name2)=3 THEN p2x1:=61
  1558. IF StrLen(name3)=3 THEN p3x1:=61
  1559. IF StrLen(name4)=3 THEN p4x1:=61
  1560. IF StrLen(name1)=2 THEN p1x1:=65
  1561. IF StrLen(name2)=2 THEN p2x1:=65
  1562. IF StrLen(name3)=2 THEN p3x1:=65
  1563. IF StrLen(name4)=2 THEN p4x1:=65
  1564. IF StrLen(name1)=1 THEN p1x1:=69
  1565. IF StrLen(name2)=1 THEN p2x1:=69
  1566. IF StrLen(name3)=1 THEN p3x1:=69
  1567. IF StrLen(name4)=1 THEN p4x1:=69
  1568. IF play1<10 THEN p1x2:=132
  1569. IF play2<10 THEN p2x2:=132 
  1570. IF play3<10 THEN p3x2:=132 
  1571. IF play4<10 THEN p4x2:=132
  1572. IF (play1>9) AND (play1<100) THEN p1x2:=128
  1573. IF (play2>9) AND (play2<100) THEN p2x2:=128
  1574. IF (play3>9) AND (play3<100) THEN p3x2:=128
  1575. IF (play4>9) AND (play4<100) THEN p4x2:=128
  1576. IF (play1>99) THEN p1x2:=124
  1577. IF (play2>99) THEN p2x2:=124
  1578. IF (play3>99) THEN p3x2:=124
  1579. IF (play4>99) THEN p4x2:=124
  1580.  
  1581. IF rank1=1 
  1582. TextF(p1x1,36,name1)
  1583. StringF(play,'\d',play1)
  1584. TextF(p1x2,36,play)
  1585. ENDIF
  1586.  
  1587. IF rank2=1 
  1588. TextF(p2x1,36,name2)
  1589. StringF(play,'\d',play2)
  1590. TextF(p2x2,36,play)
  1591. ENDIF
  1592.  
  1593. IF rank3=1 
  1594. TextF(p3x1,36,name3)
  1595. StringF(play,'\d',play3)
  1596. TextF(p3x2,36,play)
  1597. ENDIF
  1598. IF rank4=1 
  1599. TextF(p4x1,36,name4)
  1600. StringF(play,'\d',play4)
  1601. TextF(p4x2,36,play)
  1602. ENDIF
  1603.  
  1604. IF rank1=2 
  1605. TextF(p1x1,52,name1)
  1606. StringF(play,'\d',play1)
  1607. TextF(p1x2,52,play)
  1608. ENDIF
  1609. IF rank2=2 
  1610. TextF(p2x1,52,name2)
  1611. StringF(play,'\d',play2)
  1612. TextF(p2x2,52,play)
  1613. ENDIF
  1614. IF rank3=2 
  1615. TextF(p3x1,52,name3)
  1616. StringF(play,'\d',play3)
  1617. TextF(p3x2,52,play)
  1618. ENDIF
  1619. IF rank4=2 
  1620. TextF(p4x1,52,name4)
  1621. StringF(play,'\d',play4)
  1622. TextF(p4x2,52,play)
  1623. ENDIF
  1624.  
  1625. IF rank1=3 
  1626. TextF(p1x1,68,name1)
  1627. StringF(play,'\d',play1)
  1628. TextF(p1x2,68,play)
  1629. ENDIF
  1630. IF rank2=3 
  1631. TextF(p2x1,68,name2)
  1632. StringF(play,'\d',play2)
  1633. TextF(p2x2,68,play)
  1634. ENDIF
  1635. IF rank3=3 
  1636. TextF(p3x1,68,name3)
  1637. StringF(play,'\d',play3)
  1638. TextF(p3x2,68,play)
  1639. ENDIF
  1640. IF rank4=3 
  1641. TextF(p4x1,68,name4)
  1642. StringF(play,'\d',play4)
  1643. TextF(p4x2,68,play)
  1644. ENDIF
  1645.  
  1646. IF rank1=4 
  1647. TextF(p1x1,84,name1)
  1648. StringF(play,'\d',play1)
  1649. TextF(p1x2,84,play)
  1650. ENDIF
  1651. IF rank2=4 
  1652. TextF(p2x1,84,name2)
  1653. StringF(play,'\d',play2)
  1654. TextF(p2x2,84,play)
  1655. ENDIF
  1656. IF rank3=4 
  1657. TextF(p3x1,84,name3)
  1658. StringF(play,'\d',play3)
  1659. TextF(p3x2,84,play)
  1660. ENDIF
  1661. IF rank4=4 
  1662. TextF(p4x1,84,name4)
  1663. StringF(play,'\d',play4)
  1664. TextF(p4x2,84,play)
  1665. ENDIF
  1666.  
  1667.   process_window_events5(mywin5, my_gads5)
  1668.  
  1669. EXCEPT DO  
  1670. IF mywin5 THEN CloseW(mywin5)
  1671.   FreeGadgets(glist5)
  1672.   ReThrow()
  1673. ENDPROC
  1674.  
  1675.  
  1676. PROC createAllGadgets5(glistptr:PTR TO LONG, vi, topborder,
  1677.                       my_gads:PTR TO LONG)
  1678.   DEF ng:PTR TO newgadget
  1679.  
  1680.   gad5:=CreateContext(glistptr)
  1681.  
  1682.   ng:=[140, (20+topborder), 200, 12, '_Volume:   ', topaz80,
  1683.         NIL, NG_HIGHLABEL, vi, 0]:newgadget
  1684.  
  1685.   ng.leftedge   := 8
  1686.   ng.topedge    := 92
  1687.   ng.width      := 72
  1688.   ng.height     := 15
  1689.   ng.gadgettext := '_Play'
  1690.   ng.gadgetid   := MYGAD5_BUTTON2
  1691.   ng.flags      := PLACETEXT_IN
  1692.   ebutton:=CreateGadgetA(BUTTON_KIND, gad5, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1693.  
  1694.   ng.leftedge   := 84
  1695.   ng.topedge    := 92
  1696.   ng.width      := 72
  1697.   ng.height     := 15
  1698.   ng.gadgettext := '_Quit'
  1699.   ng.gadgetid   := MYGAD5_BUTTON
  1700.   ng.flags      := PLACETEXT_IN
  1701.   ebutton2:=CreateGadgetA(BUTTON_KIND, ebutton, ng, [GA_DISABLED, FALSE, GT_UNDERSCORE, "_"])
  1702.  
  1703. ENDPROC(gad5)
  1704.  
  1705. PROC process_window_events5(mywin5:PTR TO window, my_gads5:PTR TO LONG)
  1706.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad5
  1707.   REPEAT
  1708.     Wait(Shl(1, mywin5.userport.sigbit))
  1709.     WHILE (terminated5=FALSE) AND (imsg:=Gt_GetIMsg(mywin5.userport))
  1710.       gad5:=imsg.iaddress
  1711.  
  1712.       imsgClass:=imsg.class
  1713.       imsgCode:=imsg.code
  1714.  
  1715.       Gt_ReplyIMsg(imsg)
  1716.  
  1717.       SELECT imsgClass
  1718.       CASE IDCMP_GADGETDOWN
  1719.         handleGadgetEvent5(mywin5, gad5, imsgCode, my_gads5)
  1720.       CASE IDCMP_GADGETUP
  1721.         handleGadgetEvent5(mywin5, gad5, imsgCode, my_gads5)
  1722.       CASE IDCMP_VANILLAKEY
  1723.         handleVanillaKey5(mywin5, imsgCode, my_gads5)
  1724.       CASE IDCMP_REFRESHWINDOW
  1725.         Gt_BeginRefresh(mywin5)
  1726.         Gt_EndRefresh(mywin5, TRUE)
  1727.       ENDSELECT
  1728.  
  1729.  ENDWHILE
  1730.   UNTIL terminated5
  1731. ENDPROC
  1732.  
  1733. PROC handleGadgetEvent5(win, gad:PTR TO gadget, code,
  1734.                        my_gads:PTR TO LONG)
  1735.   DEF id
  1736.   id:=gad.gadgetid
  1737.   SELECT id
  1738. CASE MYGAD5_BUTTON
  1739. terminated5:=TRUE
  1740. CASE MYGAD5_BUTTON2
  1741. terminated5:=TRUE
  1742. playon:=TRUE
  1743. ENDSELECT
  1744. ENDPROC
  1745.  
  1746. PROC handleVanillaKey5(win, code, my_gads:PTR TO LONG)
  1747.   SELECT "w" OF code
  1748.   CASE "Q", "q"
  1749. terminated5:=TRUE
  1750.   CASE "P", "p"
  1751. IF blocked5=FALSE
  1752. terminated5:=TRUE
  1753. playon:=TRUE
  1754. ENDIF
  1755. ENDSELECT
  1756. ENDPROC
  1757.  
  1758. PROC saveprefs() HANDLE
  1759. DEF savedata[500]:STRING,length, csol1r[3]:STRING, csol1g[3]:STRING,
  1760. csol1b[3]:STRING, csol2r[3]:STRING, csol2g[3]:STRING, csol2b[3]:STRING,
  1761. csol3r[3]:STRING, csol3g[3]:STRING, csol3b[3]:STRING, csol4r[3]:STRING,
  1762. csol4g[3]:STRING, csol4b[3]:STRING, cputemp[3]:STRING
  1763. IF col1r<10 THEN StringF(csol1r,'XX\d',col1r)
  1764. IF (col1r<100) AND (col1r>9) THEN StringF(csol1r,'X\d',col1r)
  1765. IF col1g<10 THEN StringF(csol1g,'XX\d',col1g)
  1766. IF (col1g<100) AND (col1g>9) THEN StringF(csol1g,'X\d',col1g)
  1767. IF col1b<10 THEN StringF(csol1b,'XX\d',col1b)
  1768. IF (col1b<100) AND (col1b>9) THEN StringF(csol1b,'X\d',col1b)
  1769. IF col2r<10 THEN StringF(csol2r,'XX\d',col2r)
  1770. IF (col2r<100) AND (col2r>9) THEN StringF(csol2r,'X\d',col2r)
  1771. IF col2g<10 THEN StringF(csol2g,'XX\d',col2g)
  1772. IF (col2g<100) AND (col2g>9) THEN StringF(csol2g,'X\d',col2g)
  1773. IF col2b<10 THEN StringF(csol2b,'XX\d',col2b)
  1774. IF (col2b<100) AND (col2b>9) THEN StringF(csol2b,'X\d',col2b)
  1775. IF col3r<10 THEN StringF(csol3r,'XX\d',col3r)
  1776. IF (col3r<100) AND (col3r>9) THEN StringF(csol3r,'X\d',col3r)
  1777. IF col3g<10 THEN StringF(csol3g,'XX\d',col3g)
  1778. IF (col3g<100) AND (col3g>9) THEN StringF(csol3g,'X\d',col3g)
  1779. IF col3b<10 THEN StringF(csol3b,'XX\d',col3b)
  1780. IF (col3b<100) AND (col3b>9) THEN StringF(csol3b,'X\d',col3b)
  1781. IF col4r<10 THEN StringF(csol4r,'XX\d',col4r)
  1782. IF (col4r<100) AND (col4r>9) THEN StringF(csol4r,'X\d',col4r)
  1783. IF col4g<10 THEN StringF(csol4g,'XX\d',col4g)
  1784. IF (col4g<100) AND (col4g>9) THEN StringF(csol4g,'X\d',col4g)
  1785. IF col4b<10 THEN StringF(csol4b,'XX\d',col4b)
  1786. IF (col4b<100) AND (col4b>9) THEN StringF(csol4b,'X\d',col4b)
  1787. IF StrCmp(csol1r,'',ALL)=TRUE THEN StringF(csol1r,'\d',col1r)
  1788. IF StrCmp(csol1g,'',ALL)=TRUE THEN StringF(csol1g,'\d',col1g)
  1789. IF StrCmp(csol1b,'',ALL)=TRUE THEN StringF(csol1b,'\d',col1b)
  1790. IF StrCmp(csol2r,'',ALL)=TRUE THEN StringF(csol2r,'\d',col2r)
  1791. IF StrCmp(csol2g,'',ALL)=TRUE THEN StringF(csol2g,'\d',col2g)
  1792. IF StrCmp(csol2b,'',ALL)=TRUE THEN StringF(csol2b,'\d',col2b)
  1793. IF StrCmp(csol3r,'',ALL)=TRUE THEN StringF(csol3r,'\d',col3r)
  1794. IF StrCmp(csol3g,'',ALL)=TRUE THEN StringF(csol3g,'\d',col3g)
  1795. IF StrCmp(csol3b,'',ALL)=TRUE THEN StringF(csol3b,'\d',col3b)
  1796. IF StrCmp(csol4r,'',ALL)=TRUE THEN StringF(csol4r,'\d',col4r)
  1797. IF StrCmp(csol4g,'',ALL)=TRUE THEN StringF(csol4g,'\d',col4g)
  1798. IF StrCmp(csol4b,'',ALL)=TRUE THEN StringF(csol4b,'\d',col4b)
  1799. IF stupid=100 THEN StringF(cputemp,'\d',stupid) ELSE StringF(cputemp,'X\d',stupid)
  1800. StringF(savedata,'Game:\d\d\d\d\nPlayer:\d\d\d\d\nNo:\d\nCol1:\s,\s,\s\nCol2:\s,\s,\s\nCol3:\s,\s,\s\nCol4:\s,\s,\s\nName1:\s\nName2:\s\nName3:\s\nName4:\s\nSwoo:\d\nCpu:\s\n\nLightSpeed2 Copyright © 1998 Micro Design (Richard West & Daniel Pimley)\n\nend.',accelaration+2,obstacles+2,wrap+2,blocks+2,play1control,play2control,play3control,play4control,playerno, csol1r, csol1g, csol1b, csol2r, csol2g, csol2b, csol3r, csol3g, csol3b, csol4r, csol4g, csol4b, tname1, tname2, tname3, tname4, swooshy+2, cputemp)
  1801. length:=StrLen(savedata)
  1802. writefile('PROGDIR:light.prefs',savedata,length)
  1803. EXCEPT DO
  1804. IF exception
  1805.    request(' Could Not Save Prefs File\n\n(Disk/File Write Protected?)',1,'Continue')
  1806. ENDIF
  1807. ENDPROC
  1808.  
  1809. PROC loadprefs()
  1810. DEF m,l,n,list,ioerror=0,temp[1]:STRING,a,temppal[4]:STRING,  temppal2[4]:STRING, counta=0,
  1811. countb=0, countc, lenplea
  1812. m,l:=readfile('PROGDIR:light.prefs')
  1813.   n:=countstrings(m,l)
  1814.   list:=stringsinfile(m,l,n)
  1815. IF StrCmp(m,'Game:',5)=FALSE THEN ioerror:=5
  1816. IF Not (StrLen(m)=9) THEN ioerror:=5
  1817. IF ioerror=0
  1818. MidStr(temp,m,5,1)
  1819. IF StrCmp(temp,'1',1) THEN accelaration:=TRUE ELSE accelaration:=FALSE
  1820. MidStr(temp,m,6,1)
  1821. IF StrCmp(temp,'1',1) THEN obstacles:=TRUE ELSE obstacles:=FALSE
  1822. MidStr(temp,m,7,1)
  1823. IF StrCmp(temp,'1',1) THEN wrap:=TRUE ELSE wrap:=FALSE
  1824. MidStr(temp,m,8,1)
  1825. IF StrCmp(temp,'1',1) THEN blocks:=TRUE ELSE blocks:=FALSE
  1826. m:=m+10
  1827. IF StrCmp(m,'Player:',7)=FALSE THEN JUMP ioerr
  1828. IF Not (StrLen(m)=11) THEN JUMP ioerr
  1829. MidStr(temp,m,7,1)
  1830. IF StrCmp(temp,'0',1) THEN play1control:=0
  1831. IF StrCmp(temp,'1',1) THEN play1control:=1
  1832. IF StrCmp(temp,'2',1) THEN play1control:=2
  1833. IF StrCmp(temp,'3',1) THEN play1control:=3
  1834. MidStr(temp,m,8,1)
  1835. IF StrCmp(temp,'0',1) THEN play2control:=0
  1836. IF StrCmp(temp,'1',1) THEN play2control:=1
  1837. IF StrCmp(temp,'2',1) THEN play2control:=2
  1838. IF StrCmp(temp,'3',1) THEN play2control:=3
  1839. MidStr(temp,m,9,1)
  1840. IF StrCmp(temp,'0',1) THEN play3control:=0
  1841. IF StrCmp(temp,'1',1) THEN play3control:=1
  1842. IF StrCmp(temp,'2',1) THEN play3control:=2
  1843. IF StrCmp(temp,'3',1) THEN play3control:=3
  1844. MidStr(temp,m,10,1)
  1845. IF StrCmp(temp,'0',1) THEN play4control:=0
  1846. IF StrCmp(temp,'1',1) THEN play4control:=1
  1847. IF StrCmp(temp,'2',1) THEN play4control:=2
  1848. IF StrCmp(temp,'3',1) THEN play4control:=3
  1849. IF (play1control=play2control) OR (play1control=play2control) OR (play1control=play3control) OR (play1control=play4control) OR (play2control=play3control) OR (play4control=play2control) OR (play3control=play4control) THEN JUMP ioerr
  1850. m:=m+12
  1851. IF StrCmp(m,'No:',3)=FALSE THEN JUMP ioerr
  1852. IF Not (StrLen(m)=4) THEN JUMP ioerr
  1853. MidStr(temp,m,3,1)
  1854. IF StrCmp(temp,'0')=TRUE THEN playerno:=0
  1855. IF StrCmp(temp,'1')=TRUE THEN playerno:=1
  1856. IF StrCmp(temp,'2')=TRUE THEN playerno:=2
  1857. IF StrCmp(temp,'3')=TRUE THEN playerno:=3
  1858. IF StrCmp(temp,'4')=TRUE THEN playerno:=4
  1859. counta:=0
  1860. countb:=0
  1861. m:=m+5
  1862. IF StrCmp(m,'Col1:',5)=FALSE THEN JUMP ioerr
  1863. MidStr(temppal,m,5,3)
  1864. a:=InStr(temppal,'X')
  1865. countc:=InStr(temppal,'X',1)
  1866. IF countc>-1 THEN (MidStr(temppal,m,7,1)) AND (a:=-1)
  1867. IF a>-1 THEN MidStr(temppal,m,6,2)
  1868. REPEAT
  1869. StringF(temppal2,'\d',counta)
  1870. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1871. counta:=counta+1
  1872. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1873. UNTIL countb=5
  1874. col1r:=counta-1
  1875.  
  1876. counta:=0
  1877. countb:=0
  1878. MidStr(temppal,m,9,3)
  1879. a:=InStr(temppal,'X')
  1880. countc:=InStr(temppal,'X',1)
  1881. IF countc>-1 THEN (MidStr(temppal,m,11,1)) AND (a:=-1)
  1882. IF a>-1 THEN MidStr(temppal,m,10,2)
  1883. REPEAT
  1884. StringF(temppal2,'\d',counta)
  1885. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1886. counta:=counta+1
  1887. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1888. UNTIL countb=5
  1889. col1g:=counta-1
  1890. counta:=0
  1891. countb:=0
  1892. MidStr(temppal,m,13,3)
  1893. a:=InStr(temppal,'X')
  1894. countc:=InStr(temppal,'X',1)
  1895. IF countc>-1 THEN (MidStr(temppal,m,15,1)) AND (a:=-1)
  1896. IF a>-1 THEN MidStr(temppal,m,14,2)
  1897. REPEAT
  1898. StringF(temppal2,'\d',counta)
  1899. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1900. counta:=counta+1
  1901. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1902. UNTIL countb=5
  1903. col1b:=counta-1
  1904. m:=m+17
  1905. counta:=0
  1906. countb:=0
  1907. IF StrCmp(m,'Col2:',5)=FALSE THEN JUMP ioerr
  1908. MidStr(temppal,m,5,3)
  1909. a:=InStr(temppal,'X')
  1910. countc:=InStr(temppal,'X',1)
  1911. IF countc>-1 THEN (MidStr(temppal,m,7,1)) AND (a:=-1)
  1912. IF a>-1 THEN MidStr(temppal,m,6,2)
  1913. REPEAT
  1914. StringF(temppal2,'\d',counta)
  1915. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1916. counta:=counta+1
  1917. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1918. UNTIL countb=5
  1919. col2r:=counta-1
  1920. counta:=0
  1921. countb:=0
  1922. MidStr(temppal,m,9,3)
  1923. a:=InStr(temppal,'X')
  1924. countc:=InStr(temppal,'X',1)
  1925. IF countc>-1 THEN (MidStr(temppal,m,11,1)) AND (a:=-1)
  1926. IF a>-1 THEN MidStr(temppal,m,10,2)
  1927. REPEAT
  1928. StringF(temppal2,'\d',counta)
  1929. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1930. counta:=counta+1
  1931. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1932. UNTIL countb=5
  1933. col2g:=counta-1
  1934. counta:=0
  1935. countb:=0
  1936. MidStr(temppal,m,13,3)
  1937. a:=InStr(temppal,'X')
  1938. countc:=InStr(temppal,'X',1)
  1939. IF countc>-1 THEN (MidStr(temppal,m,15,1)) AND (a:=-1)
  1940. IF a>-1 THEN MidStr(temppal,m,14,2)
  1941. REPEAT
  1942. StringF(temppal2,'\d',counta)
  1943. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1944. counta:=counta+1
  1945. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1946. UNTIL countb=5
  1947. col2b:=counta-1
  1948. m:=m+17
  1949. counta:=0
  1950. countb:=0
  1951. IF StrCmp(m,'Col3:',5)=FALSE THEN JUMP ioerr
  1952. MidStr(temppal,m,5,3)
  1953. a:=InStr(temppal,'X')
  1954. countc:=InStr(temppal,'X',1)
  1955. IF countc>-1 THEN (MidStr(temppal,m,7,1)) AND (a:=-1)
  1956. IF a>-1 THEN MidStr(temppal,m,6,2)
  1957. REPEAT
  1958. StringF(temppal2,'\d',counta)
  1959. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1960. counta:=counta+1
  1961. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1962. UNTIL countb=5
  1963. col3r:=counta-1
  1964. counta:=0
  1965. countb:=0
  1966. MidStr(temppal,m,9,3)
  1967. a:=InStr(temppal,'X')
  1968. countc:=InStr(temppal,'X',1)
  1969. IF countc>-1 THEN (MidStr(temppal,m,11,1)) AND (a:=-1)
  1970. IF a>-1 THEN MidStr(temppal,m,10,2)
  1971. REPEAT
  1972. StringF(temppal2,'\d',counta)
  1973. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1974. counta:=counta+1
  1975. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1976. UNTIL countb=5
  1977. col3g:=counta-1
  1978. counta:=0
  1979. countb:=0
  1980. MidStr(temppal,m,13,3)
  1981. a:=InStr(temppal,'X')
  1982. countc:=InStr(temppal,'X',1)
  1983. IF countc>-1 THEN (MidStr(temppal,m,15,1)) AND (a:=-1)
  1984. IF a>-1 THEN MidStr(temppal,m,14,2)
  1985. REPEAT
  1986. StringF(temppal2,'\d',counta)
  1987. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  1988. counta:=counta+1
  1989. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  1990. UNTIL countb=5
  1991. col3b:=counta-1
  1992. m:=m+17
  1993. counta:=0
  1994. countb:=0
  1995. IF StrCmp(m,'Col4:',5)=FALSE THEN JUMP ioerr
  1996. MidStr(temppal,m,5,3)
  1997. a:=InStr(temppal,'X')
  1998. countc:=InStr(temppal,'X',1)
  1999. IF countc>-1 THEN (MidStr(temppal,m,7,1)) AND (a:=-1)
  2000. IF a>-1 THEN MidStr(temppal,m,6,2)
  2001. REPEAT
  2002. StringF(temppal2,'\d',counta)
  2003. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  2004. counta:=counta+1
  2005. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  2006. UNTIL countb=5
  2007. col4r:=counta-1
  2008. counta:=0
  2009. countb:=0
  2010. MidStr(temppal,m,9,3)
  2011. a:=InStr(temppal,'X')
  2012. countc:=InStr(temppal,'X',1)
  2013. IF countc>-1 THEN (MidStr(temppal,m,11,1)) AND (a:=-1)
  2014. IF a>-1 THEN MidStr(temppal,m,10,2)
  2015. REPEAT
  2016. StringF(temppal2,'\d',counta)
  2017. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  2018. counta:=counta+1
  2019. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  2020. UNTIL countb=5
  2021. col4g:=counta-1
  2022. counta:=0
  2023. countb:=0
  2024. MidStr(temppal,m,13,3)
  2025. a:=InStr(temppal,'X')
  2026. countc:=InStr(temppal,'X',1)
  2027. IF countc>-1 THEN (MidStr(temppal,m,15,1)) AND (a:=-1)
  2028. IF a>-1 THEN MidStr(temppal,m,14,2)
  2029. REPEAT
  2030. StringF(temppal2,'\d',counta)
  2031. IF StrCmp(temppal,temppal2,ALL=TRUE) THEN countb:=5
  2032. counta:=counta+1
  2033. IF (counta=256) AND (countb=0) THEN JUMP ioerr
  2034. UNTIL countb=5
  2035. col4b:=counta-1
  2036. m:=m+17
  2037. IF StrCmp(m,'Name1:',6)=FALSE THEN JUMP ioerr
  2038. lenplea:=StrLen(m)
  2039. IF lenplea>13 THEN JUMP ioerr
  2040. MidStr(tname1,m,6,lenplea)
  2041. m:=m+lenplea+1
  2042. IF StrCmp(m,'Name2:',6)=FALSE THEN JUMP ioerr
  2043. lenplea:=StrLen(m)
  2044. IF lenplea>13 THEN JUMP ioerr
  2045. MidStr(tname2,m,6,lenplea)
  2046. m:=m+lenplea+1
  2047. IF StrCmp(m,'Name3:',6)=FALSE THEN JUMP ioerr
  2048. lenplea:=StrLen(m)
  2049. IF lenplea>13 THEN JUMP ioerr
  2050. MidStr(tname3,m,6,lenplea)
  2051. m:=m+lenplea+1
  2052. IF StrCmp(m,'Name4:',6)=FALSE THEN JUMP ioerr
  2053. lenplea:=StrLen(m)
  2054. IF lenplea>13 THEN JUMP ioerr
  2055. MidStr(tname4,m,6,lenplea)
  2056. m:=m+lenplea+1
  2057. IF StrCmp(m,'Swoo:',5)=FALSE THEN JUMP ioerr
  2058. MidStr(temp,m,5,1)
  2059. IF StrCmp(temp,'1',ALL)=TRUE THEN swooshy:=TRUE ELSE swooshy:=FALSE
  2060. m:=m+7
  2061. IF StrCmp(m,'Cpu:',4)=FALSE THEN JUMP ioerr
  2062. MidStr(temp,m,4,1)
  2063. IF StrCmp(temp,'X',1)=TRUE
  2064. MidStr(temppal,m,5,2)
  2065. ELSE
  2066. MidStr(temppal,m,4,3)
  2067. ENDIF
  2068. counta:=20
  2069. countb:=0
  2070.  
  2071. REPEAT
  2072. StringF(temppal2,'\d',counta)
  2073. IF StrCmp(temppal,temppal2,ALL)=TRUE THEN countb:=counta
  2074. counta:=counta+1
  2075. IF counta=102 THEN JUMP ioerr
  2076. UNTIL countb<>0
  2077. stupid:=countb
  2078. sliderb_level:=countb
  2079.  
  2080. ELSE
  2081. ioerr:
  2082. col1r:=255 ; col1g:=255 ; col1b:=255
  2083. col2r:=255 ; col2g:=255 ; col2b:=165
  2084. col3r:=165 ; col3g:=255 ; col3b:=165
  2085. col4r:=255 ; col4g:=180 ; col4b:=180
  2086. swooshy:=FALSE
  2087. stupid:=70
  2088. playerno:=0
  2089. wrap:=FALSE
  2090. obstacles:=FALSE
  2091. blocks:=FALSE
  2092. accelaration:=FALSE
  2093. play1control:=0
  2094. play2control:=1
  2095. play3control:=2
  2096. play4control:=3
  2097. tname1:='Jam' ; tname2:='Custard' ; tname3:='Syrup' ; tname4:='Treacle'
  2098. ENDIF
  2099. ENDPROC
  2100.  
  2101.  
  2102. PROC ghostgadgets()
  2103. InitRequester(myreq)
  2104. IF Request(myreq, mywin)
  2105.  RETURN TRUE
  2106. ELSE
  2107.  RETURN FALSE
  2108. ENDIF
  2109. ENDPROC
  2110.  
  2111. PROC unghostgadgets()
  2112. EndRequest(myreq, mywin)
  2113. ENDPROC
  2114.  
  2115. PROC drawcols()
  2116.   shineBorder:=[0, 0, 2, 0,
  2117.                 RP_JAM1, 5, [0,0, 31,0, 31,31, 0,31, 0,0]:INT,
  2118.                 NIL]:border
  2119.   shadowBorder:=[1, 1, 1, 0,
  2120.                  RP_JAM1, 5, [0,0, 31,0, 31,31, 0,31, 0,0]:INT,
  2121.                  shineBorder]:border
  2122.   shineBorderC:=[0, 0, 0, 0,
  2123.                 RP_JAM1, 5, [0,0, 31,0, 31,31, 0,31, 0,0]:INT,
  2124.                 NIL]:border
  2125.   shadowBorderC:=[1, 1, 0, 0,
  2126.                  RP_JAM1, 5, [0,0, 31,0, 31,31, 0,31, 0,0]:INT,
  2127.                  shineBorderC]:border
  2128.  
  2129.   DrawBorder(mywin4.rport, shadowBorder, 12, 15)
  2130.  
  2131. Line(162,77,169,77,1)
  2132. Line(162,94,169,94,1)
  2133. Line(162,109,169,109,1)
  2134.  
  2135.  
  2136. Box(18,21,38,41,1)
  2137. Box(58,21,78,41,1)
  2138. Box(98,21,118,41,1)
  2139. Box(138,21,158,41,1)
  2140. Box(23,26,33,36,4)
  2141. Box(63,26,73,36,5)
  2142. Box(103,26,113,36,6)
  2143. Box(143,26,153,36,7)
  2144. ENDPROC
  2145.  
  2146.  
  2147. PROC killmouse() 
  2148.         mouserequest.command:=IND_SETMPORT
  2149.         mouserequest.data:=[-1]:CHAR       
  2150.         mouserequest.length:=1
  2151.         DoIO(mouserequest)
  2152. restoremouse:=FALSE
  2153. ENDPROC
  2154.  
  2155. PROC instmouse() 
  2156.         mouserequest.command:=IND_SETMPORT
  2157.         mouserequest.data:=[0]:CHAR  
  2158.         mouserequest.length:=1
  2159.         DoIO(mouserequest)
  2160. restoremouse:=TRUE
  2161. ENDPROC
  2162.  
  2163. PROC gameinitial() 
  2164.   DEF joytrigger:gameporttrigger, joytriggerm:gameporttrigger
  2165.  
  2166. killmouse()
  2167.   exec:=execbase
  2168.   game_io_msg.mn.ln.type:=NT_UNKNOWN
  2169.   game_io_msgm.mn.ln.type:=NT_UNKNOWN
  2170.  
  2171.     set_controller_type(GPCT_ABSJOYSTICK, game_io_msg, 1)
  2172.     set_controller_type(GPCT_ABSJOYSTICK, game_io_msgm, 2)
  2173.  
  2174.     set_trigger_conditions(joytrigger, game_io_msg)
  2175.     set_trigger_conditions(joytriggerm, game_io_msgm)
  2176.  
  2177.     flush_buffer(game_io_msg)
  2178.     flush_buffer(game_io_msgm)
  2179.  
  2180.     processEvents(game_io_msg, game_msg_port, game_io_msgm, game_msg_portm)
  2181.     
  2182. free_gp_unit(game_io_msg, 1)
  2183. free_gp_unit(game_io_msgm, 2)
  2184.  
  2185. instmouse()
  2186. ENDPROC
  2187.  
  2188. PROC check_move(game_event:PTR TO inputevent)
  2189.   DEF timeout=FALSE
  2190.  
  2191. IF joy1loop=FALSE
  2192.   movex:=game_event.x
  2193.   movey:=game_event.y
  2194. ELSE
  2195. joy1loop:=FALSE
  2196. ENDIF
  2197. IF play1control=0 THEN hmove(movex, movey, 1)
  2198. IF play1control=1 THEN hmove(movex, movey, 2)
  2199. IF play1control=2 THEN hmove(movex, movey, 3)
  2200. IF play1control=3 THEN hmove(movex, movey, 4)
  2201. ENDPROC timeout
  2202.  
  2203.  
  2204. PROC check_movem(game_event:PTR TO inputevent)
  2205.   DEF timeout=FALSE
  2206.  
  2207. IF joy2loop=FALSE
  2208.   movex2:=game_event.x
  2209.   movey2:=game_event.y
  2210. ELSE 
  2211. joy2loop:=FALSE
  2212. ENDIF
  2213.  
  2214. IF play2control=0 THEN hmove(movex2, movey2, 1)
  2215. IF play2control=1 THEN hmove(movex2, movey2, 2)
  2216. IF play2control=2 THEN hmove(movex2, movey2, 3)
  2217. IF play2control=3 THEN hmove(movex2, movey2, 4)
  2218. ENDPROC timeout
  2219.  
  2220.  
  2221. PROC hmove(xmo, ymo, who)
  2222.  
  2223. IF who=1 
  2224. x:=x1 ; y:=y1 ; joy:=joy1 ; speed:=speed1 ; diel:=die1
  2225. ENDIF
  2226. IF who=2 
  2227. x:=x2 ; y:=y2 ; joy:=joy2 ; speed:=speed2 ; diel:=die2
  2228. ENDIF
  2229. IF who=3 
  2230. x:=x3 ; y:=y3 ; joy:=joy3 ; speed:=speed3 ; diel:=die3
  2231. ENDIF
  2232. IF who=4 
  2233. x:=x4 ; y:=y4 ; joy:=joy4 ; speed:=speed4 ; diel:=die4
  2234. ENDIF
  2235.  
  2236. IF playcount=4 THEN newgame:=FALSE
  2237. playcount:=playcount+1
  2238.  
  2239. IF diel=FALSE
  2240.  
  2241. IF newgame=FALSE
  2242.   IF (xmo=1) AND (ymo=0) AND Not ((joy=3))
  2243.       joy:=4
  2244.   ENDIF
  2245.   IF (xmo=-1) AND (ymo=0) AND Not ((joy=4))
  2246.       joy:=3
  2247.   ENDIF
  2248.   IF (ymo=1) AND (xmo=0) AND Not ((joy=1))
  2249.       joy:=2
  2250.   ENDIF
  2251.   IF (ymo=-1) AND (xmo=0) AND Not ((joy=2))
  2252.       joy:=1
  2253.   ENDIF
  2254. ELSE
  2255. IF (xmo=1) AND (ymo=0) THEN joy:=4
  2256. IF (xmo=-1) AND (ymo=0) THEN joy:=3
  2257. IF (xmo=0) AND (ymo=1) THEN joy:=2
  2258. IF (xmo=0) AND (ymo=-1) THEN joy:=1
  2259. IF who=1 THEN joy1:=joy
  2260. IF who=2 THEN joy2:=joy 
  2261. IF who=3 THEN joy3:=joy 
  2262. IF who=4 THEN joy4:=joy 
  2263. ENDIF
  2264.  
  2265.  
  2266.   IF joy=1 THEN y:=y-1
  2267.   IF joy=2 THEN y:=y+1
  2268.   IF joy=3 THEN x:=x-1
  2269.   IF joy=4 THEN x:=x+1
  2270.  
  2271. IF wrap=TRUE
  2272.   IF x<=4 THEN x:=313
  2273.   IF x>=314 THEN x:=5
  2274.   IF y<=0 THEN y:=243
  2275.   IF y>=244 THEN y:=1
  2276. ELSE
  2277.   IF (x<=4) OR (x>=314) OR (y<=0) OR (y>=244) 
  2278. die(who)
  2279. JUMP loopexit
  2280. ENDIF
  2281. ENDIF
  2282.  
  2283. IF speed=0
  2284. IF (checkcol(ReadPixel(hidden.rport,x,y)))=TRUE
  2285. die(who)
  2286. ELSE
  2287.   Plot(x,y,who+3)
  2288. ENDIF
  2289. ELSE
  2290.  
  2291.      IF joy=1 
  2292. noise(who)
  2293.       IF y-5<1
  2294.        tempy1:=y
  2295.    REPEAT
  2296.         IF (checkcol(ReadPixel(hidden.rport,x,tempy1)))=TRUE
  2297.            Line(x,y,x,tempy1+1,who+3)
  2298.            die(who) ; JUMP loopexit
  2299.           ENDIF
  2300.        tempy1:=tempy1-1
  2301.       UNTIL tempy1=0
  2302.          Line(x,y,x,1,who+3)
  2303.         y:=1
  2304.      ELSE
  2305.        tempy1:=y
  2306.       REPEAT
  2307.         IF (checkcol(ReadPixel(hidden.rport,x,tempy1)))=TRUE
  2308.            Line(x,y,x,tempy1+1,who+3)
  2309.            die(who) ; JUMP loopexit
  2310.           ENDIF
  2311.        tempy1:=tempy1-1
  2312.       UNTIL tempy1=(y-6)
  2313.       Line(x,y,x,y-5,who+3)
  2314.       y:=y-5
  2315.       ENDIF
  2316.      ENDIF
  2317.  
  2318.  
  2319.      IF joy=2 
  2320. noise(who)
  2321.       IF y+5>243
  2322.        tempy1:=y
  2323.    REPEAT
  2324.         IF (checkcol(ReadPixel(hidden.rport,x,tempy1)))=TRUE
  2325.            Line(x,y,x,tempy1-1,who+3)
  2326.            die(who) ; JUMP loopexit
  2327.           ENDIF
  2328.        tempy1:=tempy1+1
  2329.       UNTIL tempy1=244
  2330.       Line(x,y,x,243,who+3)
  2331.       y:=243
  2332.       ELSE
  2333.        tempy1:=y
  2334.       REPEAT
  2335.         IF (checkcol(ReadPixel(hidden.rport,x,tempy1)))=TRUE
  2336.            Line(x,y,x,tempy1-1,who+3)
  2337.            die(who) ; JUMP loopexit
  2338.           ENDIF
  2339.        tempy1:=tempy1+1
  2340.       UNTIL tempy1=(y+6)
  2341.       Line(x,y,x,y+5,who+3)
  2342.       y:=y+5
  2343.       ENDIF
  2344.      ENDIF
  2345.  
  2346.     IF joy=3
  2347. noise(who)
  2348.      IF x-5<5
  2349.        tempx1:=x
  2350.    REPEAT
  2351.         IF (checkcol(ReadPixel(hidden.rport,tempx1,y)))=TRUE
  2352.              Line(x,y,tempx1+1,y,who+3)
  2353.            die(who) ; JUMP loopexit
  2354.           ENDIF
  2355.        tempx1:=tempx1-1
  2356.       UNTIL tempx1=4
  2357.  
  2358.      Line(x,y,5,y,who+3)
  2359.      x:=5
  2360.      ELSE
  2361.        tempx1:=x
  2362.       REPEAT
  2363.         IF (checkcol(ReadPixel(hidden.rport,tempx1,y)))=TRUE
  2364.            Line(x,y,tempx1+1,y,who+3)
  2365.            die(who) ; JUMP loopexit
  2366.           ENDIF
  2367.        tempx1:=tempx1-1
  2368.       UNTIL tempx1=(x-6)
  2369.      Line(x,y,x-5,y,who+3)
  2370.      x:=x-5
  2371.      ENDIF
  2372.     ENDIF
  2373.  
  2374.      IF joy=4
  2375. noise(who)
  2376.       IF x+5>313
  2377.        tempx1:=x
  2378.    REPEAT
  2379.         IF (checkcol(ReadPixel(hidden.rport,tempx1,y)))=TRUE
  2380.            Line(x,y,tempx1-1,y,who+3)
  2381.            die(who) ; JUMP loopexit
  2382.           ENDIF
  2383.        tempx1:=tempx1+1
  2384.       UNTIL tempx1=314
  2385.        Line(x,y,313,y,who+3)
  2386.       x:=313
  2387.       ELSE
  2388.        tempx1:=x
  2389.       REPEAT
  2390.         IF (checkcol(ReadPixel(hidden.rport,tempx1,y)))=TRUE
  2391.            Line(x,y,tempx1-1,y,who+3)
  2392.            die(who) ; JUMP loopexit
  2393.           ENDIF
  2394.        tempx1:=tempx1+1
  2395.       UNTIL tempx1=(x+6)
  2396.       Line(x,y,x+5,y,who+3) 
  2397.       x:=x+5
  2398.       ENDIF
  2399.      ENDIF
  2400.  
  2401. speed:=speed-1
  2402. ENDIF
  2403. ENDIF
  2404. loopexit:
  2405.  
  2406. IF swooshy=TRUE
  2407. IF (who=1) AND (joy1<>joy)
  2408.   playData(sampled,samplend,1500000,CHAN_LEFT1,20)
  2409. WaitTOF()
  2410. exitLoop(CHAN_LEFT1)
  2411. ENDIF
  2412. IF (who=2) AND (joy2<>joy)
  2413.   playData(sampled,samplend,1600000,CHAN_LEFT2,20)
  2414. WaitTOF()
  2415. exitLoop(CHAN_LEFT2)
  2416. ENDIF
  2417. IF (who=3) AND (joy3<>joy)
  2418.   playData(sampled,samplend,1700000,CHAN_RIGHT1,20)
  2419. WaitTOF()
  2420. exitLoop(CHAN_RIGHT1)
  2421. ENDIF
  2422. IF (who=4) AND (joy4<>joy)
  2423.   playData(sampled,samplend,1800000,CHAN_RIGHT2,20)
  2424. WaitTOF()
  2425. exitLoop(CHAN_RIGHT2)
  2426. ENDIF
  2427. ENDIF
  2428.  
  2429. IF who=1 
  2430. x1:=x ; y1:=y ; joy1:=joy ; speed1:=speed 
  2431. ENDIF
  2432. IF who=2 
  2433. x2:=x ; y2:=y ; joy2:=joy ; speed2:=speed 
  2434. ENDIF
  2435. IF who=3 
  2436. x3:=x ; y3:=y ; joy3:=joy ; speed3:=speed 
  2437. ENDIF
  2438. IF who=4 
  2439. x4:=x ; y4:=y ; joy4:=joy ; speed4:=speed 
  2440. ENDIF
  2441.  
  2442. ENDPROC
  2443.  
  2444. PROC calccomp()
  2445. IF cdie1=FALSE
  2446.   options(1)
  2447.         IF (checkcol(ReadPixel(hidden.rport,cx1,cy1)))=TRUE
  2448.             die(1)
  2449.            JUMP loopexitc1
  2450.           ENDIF
  2451.  Plot(cx1,cy1,4)
  2452. loopexitc1:
  2453. ENDIF
  2454.  
  2455.  
  2456. IF cdie2=FALSE
  2457.   options(2)
  2458.         IF (checkcol(ReadPixel(hidden.rport,cx2,cy2)))=TRUE
  2459.             die(2)
  2460.            JUMP loopexitc2
  2461.           ENDIF
  2462.  Plot(cx2,cy2,5)
  2463. loopexitc2:
  2464. ENDIF
  2465.  
  2466. IF cdie3=FALSE
  2467.   options(3)
  2468.         IF (checkcol(ReadPixel(hidden.rport,cx3,cy3)))=TRUE
  2469.                  die(3)
  2470.            JUMP loopexitc3
  2471.           ENDIF
  2472.  Plot(cx3,cy3,6)
  2473. loopexitc3:
  2474. ENDIF
  2475.  
  2476. IF cdie4=FALSE
  2477.   options(4)
  2478.         IF (checkcol(ReadPixel(hidden.rport,cx4,cy4)))=TRUE
  2479.                die(4)
  2480.            JUMP loopexitc4
  2481.           ENDIF
  2482.  Plot(cx4,cy4,7)
  2483. loopexitc4:
  2484. ENDIF
  2485. ENDPROC
  2486.  
  2487. PROC options(cplay)
  2488. DEF decide, rand=0, go=FALSE, cx, cy, dier, cway
  2489.  
  2490.  
  2491. IF cplay=1 
  2492. cx:=cx1 ; cy:=cy1 ; dier:=1 ; cway:=cway1 ; cloop:=cloop1
  2493. ENDIF
  2494.  
  2495. IF cplay=2 
  2496. cx:=cx2 ; cy:=cy2 ; dier:=2 ; cway:=cway2 ; cloop:=cloop2
  2497. ENDIF
  2498.  
  2499. IF cplay=3 
  2500. cx:=cx3 ; cy:=cy3 ; dier:=3 ; cway:=cway3 ; cloop:=cloop3
  2501. ENDIF
  2502.  
  2503. IF cplay=4 
  2504. cx:=cx4 ; cy:=cy4 ; dier:=4 ; cway:=cway4 ; cloop:=cloop4
  2505. ENDIF
  2506.  
  2507. IF Not (stupid=9999)
  2508. cloop:=cloop+1
  2509. ENDIF
  2510.  
  2511. IF wrap=TRUE
  2512.   IF (cway=4) AND (cx=5) THEN cx:=314
  2513.   IF (cway=2) AND (cx=313) THEN cx:=4
  2514.   IF (cway=1) AND (cy=1) THEN cy:=244
  2515.   IF (cway=3) AND (cy=243) THEN cy:=0
  2516. ENDIF
  2517. IF cx<6 THEN cloop:=stupid-29
  2518. IF cx>313 THEN cloop:=stupid-29
  2519. IF cy<3 THEN cloop:=stupid-29
  2520. IF cy>243 THEN cloop:=stupid-29
  2521.  
  2522. IF cway=2
  2523. IF (cloop>stupid) OR (checkcol(ReadPixel(hidden.rport,cx+1,cy))=TRUE) THEN go:=TRUE ELSE cx:=cx+1
  2524. ENDIF
  2525. IF cway=4
  2526. IF (cloop>stupid) OR (checkcol(ReadPixel(hidden.rport,cx-1,cy))=TRUE) THEN go:=TRUE ELSE cx:=cx-1
  2527. ENDIF
  2528. IF cway=1
  2529. IF (cloop>stupid) OR (checkcol(ReadPixel(hidden.rport,cx,cy-1))=TRUE) THEN go:=TRUE ELSE cy:=cy-1
  2530. ENDIF
  2531. IF cway=3
  2532. IF (cloop>stupid) OR (checkcol(ReadPixel(hidden.rport,cx,cy+1))=TRUE) THEN go:=TRUE ELSE cy:=cy+1
  2533. ENDIF
  2534.  
  2535.  
  2536. IF go=TRUE
  2537. IF cloop>stupid THEN cloop:=0 ELSE cloop:=cloop+10
  2538. rand:=0
  2539.  
  2540.    IF (checkcol(ReadPixel(hidden.rport,cx+1,cy)))=FALSE THEN rand:=rand+1
  2541.    IF (checkcol(ReadPixel(hidden.rport,cx-1,cy)))=FALSE THEN rand:=rand+5
  2542.    IF (checkcol(ReadPixel(hidden.rport,cx,cy+1)))=FALSE THEN rand:=rand+20
  2543.    IF (checkcol(ReadPixel(hidden.rport,cx,cy-1)))=FALSE THEN rand:=rand+55
  2544.  
  2545. IF rand=1 THEN (cx:=cx+1) AND (cway:=2)
  2546. IF rand=5 THEN (cx:=cx-1) AND (cway:=4)
  2547. IF rand=20 THEN (cy:=cy+1) AND (cway:=3)
  2548. IF rand=55 THEN (cy:=cy-1) AND (cway:=1)
  2549.  
  2550. IF (rand=6) OR (rand=25) OR (rand=75) OR (rand=60) OR (rand=56) OR (rand=21)
  2551. decide:=Rnd(2)
  2552. IF (decide=0) AND (rand=6) THEN (cx:=cx+1) AND (cway:=2)
  2553. IF (decide=1) AND (rand=6) THEN (cx:=cx-1) AND (cway:=4)
  2554. IF (decide=0) AND (rand=25) THEN (cx:=cx-1) AND (cway:=4)
  2555. IF (decide=1) AND (rand=25) THEN (cy:=cy+1) AND (cway:=3)
  2556. IF (decide=0) AND (rand=75) THEN (cy:=cy+1) AND (cway:=1)
  2557. IF (decide=1) AND (rand=75) THEN (cy:=cy-1) AND (cway:=3)
  2558. IF (decide=0) AND (rand=60) THEN (cx:=cx-1) AND (cway:=4)
  2559. IF (decide=1) AND (rand=60) THEN (cy:=cy-1) AND (cway:=1)
  2560. IF (decide=0) AND (rand=56) THEN (cx:=cx+1) AND (cway:=2)
  2561. IF (decide=1) AND (rand=56) THEN (cy:=cy-1) AND (cway:=1)
  2562. IF (decide=0) AND (rand=21) THEN (cy:=cy+1) AND (cway:=3)
  2563. IF (decide=1) AND (rand=21) THEN (cx:=cx+1) AND (cway:=2)
  2564. ENDIF
  2565.  
  2566. IF (rand=26) OR (rand=76) OR (rand=80) OR (rand=61) 
  2567. decide:=Rnd(3)
  2568. IF (decide=0) AND (rand=26) THEN (cy:=cy+1) AND (cway:=3)
  2569. IF (decide=1) AND (rand=26) THEN (cx:=cx-1) AND (cway:=4)
  2570. IF (decide=2) AND (rand=26) THEN (cx:=cx+1) AND (cway:=2)
  2571. IF (decide=0) AND (rand=76) THEN (cy:=cy-1) AND (cway:=1)
  2572. IF (decide=1) AND (rand=76) THEN (cy:=cy+1) AND (cway:=3)
  2573. IF (decide=2) AND (rand=76) THEN (cx:=cx+1) AND (cway:=2)
  2574. IF (decide=0) AND (rand=80) THEN (cy:=cy+1) AND (cway:=3)
  2575. IF (decide=1) AND (rand=80) THEN (cy:=cy-1) AND (cway:=1)
  2576. IF (decide=2) AND (rand=80) THEN (cx:=cx-1) AND (cway:=4)
  2577. IF (decide=0) AND (rand=61) THEN (cy:=cy-1) AND (cway:=1)
  2578. IF (decide=1) AND (rand=61) THEN (cx:=cx-1) AND (cway:=4)
  2579. IF (decide=2) AND (rand=61) THEN (cx:=cx+1) AND (cway:=2)
  2580. ENDIF                              
  2581.  
  2582. IF rand=81
  2583. decide:=Rnd(4)
  2584. IF decide=0 THEN (cy:=cy+1) AND (cway:=3)
  2585. IF decide=1 THEN (cx:=cx-1) AND (cway:=4)
  2586. IF decide=2 THEN (cx:=cx+1) AND (cway:=2)
  2587. IF decide=3 THEN (cy:=cy-1) AND (cway:=1)
  2588. ENDIF
  2589.  
  2590. IF rand=0 THEN die(dier)
  2591. ENDIF
  2592.  
  2593. IF swooshy=TRUE
  2594. IF (cplay=1) AND (cway1<>cway)
  2595.   playData(sampled,samplend,1500000,CHAN_LEFT1,20)
  2596. WaitTOF()
  2597. exitLoop(CHAN_LEFT1)
  2598. ENDIF
  2599. IF (cplay=2) AND (cway2<>cway)
  2600.   playData(sampled,samplend,1600000,CHAN_LEFT2,20)
  2601. WaitTOF()
  2602. exitLoop(CHAN_LEFT2)
  2603. ENDIF
  2604. IF (cplay=3) AND (cway3<>cway)
  2605.   playData(sampled,samplend,1700000,CHAN_RIGHT1,20)
  2606. WaitTOF()
  2607. exitLoop(CHAN_RIGHT1)
  2608. ENDIF
  2609. IF (cplay=4) AND (cway4<>cway)
  2610.   playData(sampled,samplend,1800000,CHAN_RIGHT2,20)
  2611. WaitTOF()
  2612. exitLoop(CHAN_RIGHT2)
  2613. ENDIF
  2614. ENDIF
  2615.  
  2616. IF cplay=1 
  2617. cx1:=cx ; cy1:=cy ; cway1:=cway ; cloop1:=cloop
  2618. ENDIF
  2619. IF cplay=2 
  2620. cx2:=cx ; cy2:=cy ; cway2:=cway ; cloop2:=cloop
  2621. ENDIF
  2622. IF cplay=3 
  2623. cx3:=cx ; cy3:=cy ; cway3:=cway ; cloop3:=cloop
  2624. ENDIF
  2625. IF cplay=4 
  2626. cx4:=cx ; cy4:=cy ; cway4:=cway ; cloop4:=cloop
  2627. ENDIF
  2628.  
  2629. ENDPROC
  2630.  
  2631. PROC checkcol(colnum)
  2632. DEF crash=FALSE
  2633.  
  2634. IF colnum=1 THEN crash:=TRUE 
  2635. IF colnum=2 THEN crash:=TRUE 
  2636. IF colnum=4 THEN crash:=TRUE 
  2637. IF colnum=5 THEN crash:=TRUE 
  2638. IF colnum=6 THEN crash:=TRUE 
  2639. IF colnum=7 THEN crash:=TRUE 
  2640. IF colnum=63 THEN crash:=TRUE 
  2641. IF colnum=62 THEN crash:=TRUE 
  2642.  
  2643. IF (blocks=TRUE) AND (colnum=4) AND (cdie1=TRUE) AND (die1=TRUE) THEN crash:=FALSE
  2644. IF (blocks=TRUE) AND (colnum=5) AND (cdie2=TRUE) AND (die2=TRUE) THEN crash:=FALSE
  2645. IF (blocks=TRUE) AND (colnum=6) AND (cdie3=TRUE) AND (die3=TRUE) THEN crash:=FALSE
  2646. IF (blocks=TRUE) AND (colnum=7) AND (cdie4=TRUE) AND (die4=TRUE) THEN crash:=FALSE
  2647. ENDPROC crash
  2648.  
  2649. PROC send_read_request(game_event, game_io_msg:PTR TO iostd)
  2650.   game_io_msg.command:=GPD_READEVENT
  2651.   game_io_msg.flags:=0
  2652.   game_io_msg.data:=game_event
  2653.   game_io_msg.length:=SIZEOF inputevent
  2654.   SendIO(game_io_msg)  -> Asynchronous - message will return later
  2655.  
  2656. ENDPROC
  2657.  
  2658. PROC processEvents(game_io_msg:PTR TO iostd, game_msg_port:PTR TO mp, game_io_msgm:PTR TO iostd, game_msg_portm:PTR TO mp)
  2659.   DEF timeout, timeouts, button_count, code, code2, 
  2660.       game_event:inputevent,  
  2661.       game_eventm:inputevent
  2662.  
  2663.   DEF imsg:PTR TO intuimessage, imsgClass, imsgCode, gad
  2664.  
  2665.   timeouts:=0
  2666.   button_count:=0
  2667.   not_finished:=TRUE
  2668.  
  2669.   WHILE not_finished
  2670. imsg:=Gt_GetIMsg(hidden.userport)  
  2671.     gad:=imsg.iaddress
  2672.       imsgClass:=imsg.class
  2673.       imsgCode:=imsg.code
  2674.       Gt_ReplyIMsg(imsg)
  2675.  
  2676.     send_read_request(game_event, game_io_msg)
  2677.     send_read_request(game_eventm, game_io_msgm)
  2678.     
  2679.     WaitPort(game_msg_port)
  2680.     WaitPort(game_msg_portm)
  2681.  
  2682. WHILE ((NIL<>GetMsg(game_msg_port))) AND ((NIL<>GetMsg(game_msg_portm)))
  2683.       timeout:=FALSE
  2684.       code:=game_event.code
  2685.       code2:=game_eventm.code
  2686.  
  2687.       SELECT code
  2688.       CASE IECODE_NOBUTTON
  2689.         IF start1=TRUE
  2690.         timeout:=check_move(game_event)
  2691.         button_count:=0
  2692.         ENDIF
  2693.       CASE IECODE_LBUTTON
  2694.           IF start1=FALSE 
  2695.           start1:=TRUE
  2696.           ELSE
  2697. IF limspeed1=0
  2698. limspeed1:=40
  2699.           IF accelaration=TRUE
  2700.  
  2701. IF play1control=0 THEN speed1:=4
  2702. IF play1control=1 THEN speed2:=4
  2703. IF play1control=2 THEN speed3:=4
  2704. IF play1control=3 THEN speed4:=4
  2705. ENDIF
  2706. ENDIF
  2707. ENDIF
  2708.       DEFAULT
  2709.       ENDSELECT
  2710.  
  2711.       SELECT code2
  2712.       CASE IECODE_NOBUTTON
  2713.         IF start1=TRUE
  2714.         timeout:=check_movem(game_eventm)
  2715.         button_count:=0
  2716.         ENDIF
  2717.       CASE IECODE_LBUTTON
  2718.           IF start1=FALSE 
  2719.           start1:=TRUE
  2720.           ELSE
  2721. IF limspeed2=0
  2722. limspeed2:=40
  2723.           IF accelaration=TRUE 
  2724. IF play2control=0 THEN speed1:=4
  2725. IF play2control=1 THEN speed2:=4
  2726. IF play2control=2 THEN speed3:=4
  2727. IF play2control=3 THEN speed4:=4
  2728. ENDIF
  2729. ENDIF
  2730.           ENDIF
  2731.       DEFAULT
  2732.       ENDSELECT
  2733.  
  2734.       IF timeout
  2735.         INC timeouts
  2736.       ELSE
  2737.         timeouts:=0
  2738.       ENDIF
  2739.  
  2740. IF imsgCode=95
  2741. REPEAT
  2742. ActivateWindow(hidden)
  2743. imsg:=Gt_GetIMsg(hidden.userport)  
  2744.     gad:=imsg.iaddress
  2745.       imsgClass:=imsg.class
  2746.       imsgCode:=imsg.code
  2747.       Gt_ReplyIMsg(imsg)
  2748. UNTIL (imsgCode=95) OR (imsgCode=69)
  2749. stdrast:=hidden.rport
  2750. SetStdRast(hidden.rport)
  2751. ENDIF
  2752.  
  2753. IF start1=TRUE
  2754. IF joy3loop=FALSE
  2755. IF imsgCode=76 THEN (movementx:=0) AND (movementy:=-1)
  2756. IF imsgCode=77 THEN (movementx:=0) AND (movementy:=1)
  2757. IF imsgCode=78 THEN (movementx:=1) AND (movementy:=0)
  2758. IF imsgCode=79 THEN (movementx:=-1) AND (movementy:=0)
  2759. ELSE
  2760. joy3loop:=FALSE
  2761. ENDIF
  2762. ENDIF
  2763.  
  2764. IF accelaration=TRUE
  2765. IF (limspeed3=0) AND (imsgCode=97)
  2766. limspeed3:=40
  2767.  
  2768.  
  2769. IF play3control=0 THEN speed1:=4
  2770. IF play3control=1 THEN speed2:=4
  2771. IF play3control=2 THEN speed3:=4
  2772. IF play3control=3 THEN speed4:=4
  2773. ENDIF
  2774. ENDIF
  2775.  
  2776. IF (start1=FALSE) AND (imsgCode=97) THEN (start1:=TRUE)  AND (speed3:=0) AND (speed4:=0) AND (speed2:=0) AND (speed1:=0)
  2777.  
  2778. IF imsgCode=69 THEN not_finished:=FALSE
  2779.  
  2780. IF start1=TRUE 
  2781. IF play3control=0 THEN hmove(movementx, movementy, 1)
  2782. IF play3control=1 THEN hmove(movementx, movementy, 2)
  2783. IF play3control=2 THEN hmove(movementx, movementy, 3)
  2784. IF play3control=3 THEN hmove(movementx, movementy, 4)
  2785. ENDIF
  2786.  
  2787. IF start1=TRUE
  2788. IF joy4loop=FALSE
  2789. IF imsgCode=49 THEN (movementx3:=-1) AND (movementy3:=0)
  2790. IF imsgCode=50 THEN (movementx3:=1) AND (movementy3:=0)
  2791. IF imsgCode=32 THEN (movementx3:=0) AND (movementy3:=1)
  2792. IF imsgCode=16 THEN (movementx3:=0) AND (movementy3:=-1)
  2793. ELSE
  2794. joy4loop:=FALSE
  2795. ENDIF
  2796. ENDIF
  2797.  
  2798. IF accelaration=TRUE
  2799. IF (limspeed4=0) AND (imsgCode=64)
  2800. limspeed4:=40
  2801.  
  2802. IF play4control=0 THEN speed1:=4
  2803. IF play4control=1 THEN speed2:=4
  2804. IF play4control=2 THEN speed3:=4
  2805. IF play4control=3 THEN speed4:=4
  2806. ENDIF
  2807. ENDIF
  2808. IF (start1=FALSE) AND (imsgCode=64) THEN (start1:=TRUE) AND (speed3:=0) AND (speed4:=0) AND (speed2:=0) AND (speed1:=0)
  2809.  
  2810. IF imsgCode=69 THEN not_finished:=FALSE
  2811.  
  2812. IF start1=TRUE 
  2813. IF play4control=0 THEN hmove(movementx3, movementy3, 1)
  2814. IF play4control=1 THEN hmove(movementx3, movementy3, 2)
  2815. IF play4control=2 THEN hmove(movementx3, movementy3, 3)
  2816. IF play4control=3 THEN hmove(movementx3, movementy3, 4)
  2817. ENDIF
  2818.  
  2819. ActivateWindow(hidden)
  2820. IF limspeed1>0 THEN limspeed1:=limspeed1-1
  2821. IF limspeed2>0 THEN limspeed2:=limspeed2-1
  2822. IF limspeed3>0 THEN limspeed3:=limspeed3-1
  2823. IF limspeed4>0 THEN limspeed4:=limspeed4-1
  2824. IF start1=TRUE THEN calccomp()
  2825.   ENDWHILE
  2826.   ENDWHILE
  2827. ENDPROC
  2828.  
  2829. PROC noise(whichnoise)
  2830. IF (samplei) AND (whichnoise=1)
  2831.   playData(samplei,sampleni,90000,CHAN_LEFT1,40)
  2832. WaitTOF()
  2833. exitLoop(CHAN_LEFT1)
  2834. ENDIF
  2835.  
  2836. IF (samplei) AND (whichnoise=2)
  2837.   playData(samplei,sampleni,90000,CHAN_LEFT2,40)
  2838. WaitTOF()
  2839. exitLoop(CHAN_LEFT2)
  2840. ENDIF
  2841.  
  2842. IF (samplei) AND (whichnoise=3)
  2843.   playData(samplei,sampleni,90000,CHAN_RIGHT1,40)
  2844. WaitTOF()
  2845. exitLoop(CHAN_RIGHT1)
  2846. ENDIF
  2847.  
  2848. IF (samplei) AND (whichnoise=4)
  2849.   playData(samplei,sampleni,90000,CHAN_RIGHT2,40)
  2850. WaitTOF()
  2851. exitLoop(CHAN_RIGHT2)
  2852. ENDIF
  2853. ENDPROC
  2854.  
  2855. PROC set_controller_type(type, game_io_msg:PTR TO iostd, no)
  2856.     controller_type_addr1:=[0]:CHAR
  2857.     controller_type_addr2:=[0]:CHAR
  2858.  
  2859. IF no=1
  2860.   game_io_msg.command:=GPD_ASKCTYPE  
  2861.   game_io_msg.flags:=IOF_QUICK
  2862.   game_io_msg.data:=controller_type_addr1  
  2863.   game_io_msg.length:=1
  2864.   DoIO(game_io_msg)
  2865. ENDIF
  2866.  
  2867. IF no=2
  2868.   game_io_msg.command:=GPD_ASKCTYPE  
  2869.   game_io_msg.flags:=IOF_QUICK
  2870.   game_io_msg.data:=controller_type_addr2  
  2871.   game_io_msg.length:=1
  2872.   DoIO(game_io_msg)
  2873. ENDIF
  2874.  
  2875.     game_io_msg.command:=GPD_SETCTYPE
  2876.     game_io_msg.flags:=IOF_QUICK
  2877.     game_io_msg.data:=[type]:CHAR
  2878.     game_io_msg.length:=1
  2879.     DoIO(game_io_msg)
  2880.  
  2881. ENDPROC 
  2882.  
  2883. PROC set_trigger_conditions(gpt:PTR TO gameporttrigger,
  2884.                             game_io_msg:PTR TO iostd)
  2885.   gpt.keys:=GPTF_UPKEYS OR GPTF_DOWNKEYS
  2886.   gpt.xdelta:=JOY_X_DELTA
  2887.   gpt.ydelta:=JOY_Y_DELTA
  2888.   gpt.timeout:=1
  2889.  
  2890.   game_io_msg.command:=GPD_SETTRIGGER
  2891.   game_io_msg.flags:=IOF_QUICK
  2892.   game_io_msg.data:=gpt
  2893.   game_io_msg.length:=SIZEOF gameporttrigger
  2894.   DoIO(game_io_msg)
  2895.  
  2896. ENDPROC
  2897.  
  2898. PROC flush_buffer(game_io_msg:PTR TO iostd)
  2899.   game_io_msg.command:=CMD_CLEAR
  2900.   game_io_msg.flags:=IOF_QUICK
  2901.   game_io_msg.data:=NIL
  2902.   game_io_msg.length:=0
  2903.   DoIO(game_io_msg)
  2904. ENDPROC
  2905.  
  2906. PROC free_gp_unit(game_io_msg:PTR TO iostd, no)
  2907.  
  2908. IF no=1
  2909.   game_io_msg.command:=GPD_SETCTYPE
  2910.   game_io_msg.flags:=IOF_QUICK
  2911.   game_io_msg.data:=controller_type_addr1  
  2912.   game_io_msg.length:=1;
  2913.   DoIO(game_io_msg)
  2914. ENDIF
  2915. IF no=2
  2916.   game_io_msg.command:=GPD_SETCTYPE
  2917.   game_io_msg.flags:=IOF_QUICK
  2918.    game_io_msg.data:=controller_type_addr2  
  2919.      game_io_msg.length:=1;
  2920.   DoIO(game_io_msg)
  2921. ENDIF
  2922.  
  2923. ENDPROC
  2924.  
  2925. PROC begingame()
  2926. DEF pos0=FALSE, pos1=FALSE, pos2=FALSE, pos3=FALSE, pos4=FALSE, pos5=FALSE, pos6=FALSE, pos7=FALSE, pos8=FALSE, pos9=FALSE, pos10=FALSE, pos11=FALSE, pos12=FALSE, pos13=FALSE, pos14=FALSE, pos15=FALSE,
  2927. nochips, whichchip, poschip, posx, posy, badnum=TRUE, a[5]:STRING
  2928.  
  2929. IF playerno=0 
  2930. die1:=FALSE ; die2:=TRUE ; die3:=TRUE ; die4:=TRUE ; cdie1:=TRUE ; cdie2:=FALSE ; cdie3:=FALSE ; cdie4:=FALSE
  2931. ENDIF 
  2932. IF playerno=1 
  2933. die1:=FALSE ; die2:=FALSE ; die3:=TRUE ; die4:=TRUE ; cdie1:=TRUE ; cdie2:=TRUE ; cdie3:=FALSE ; cdie4:=FALSE
  2934. ENDIF 
  2935. IF playerno=2 
  2936. die1:=FALSE ; die2:=FALSE ; die3:=FALSE ; die4:=TRUE ; cdie1:=TRUE ; cdie2:=TRUE ; cdie3:=TRUE ; cdie4:=FALSE
  2937. ENDIF 
  2938. IF playerno=3 
  2939. die1:=FALSE ; die2:=FALSE ; die3:=FALSE ; die4:=FALSE ; cdie1:=TRUE ; cdie2:=TRUE ; cdie3:=TRUE ; cdie4:=TRUE
  2940. ENDIF 
  2941. IF playerno=4
  2942. die1:=TRUE ; die2:=TRUE ; die3:=TRUE ; die4:=TRUE ; cdie1:=FALSE ; cdie2:=FALSE ; cdie3:=FALSE ; cdie4:=FALSE ; start1:=TRUE
  2943. ENDIF 
  2944. IF play1control=0 THEN (movex:=0) AND (movey:=-1)
  2945. IF play1control=1 THEN (movex:=1) AND (movey:=0)
  2946. IF play1control=2 THEN (movex:=0) AND (movey:=1)
  2947. IF play1control=3 THEN (movex:=-1) AND (movey:=0)
  2948. IF play2control=0 THEN (movex2:=0) AND (movey2:=-1)
  2949. IF play2control=1 THEN (movex2:=1) AND (movey2:=0)
  2950. IF play2control=2 THEN (movex2:=0) AND (movey2:=1)
  2951. IF play2control=3 THEN (movex2:=-1) AND (movey2:=0)
  2952. IF play3control=0 THEN (movementx:=0) AND (movementy:=-1)
  2953. IF play3control=1 THEN (movementx:=1) AND (movementy:=0)
  2954. IF play3control=2 THEN (movementx:=0) AND (movementy:=1)
  2955. IF play3control=3 THEN (movementx:=-1) AND (movementy:=0)
  2956. IF play4control=0 THEN (movementx3:=0) AND (movementy3:=-1)
  2957. IF play4control=1 THEN (movementx3:=1) AND (movementy3:=0)
  2958. IF play4control=2 THEN (movementx3:=0) AND (movementy3:=1)
  2959. IF play4control=3 THEN (movementx3:=-1) AND (movementy3:=0)
  2960.  
  2961. IF play1control=0 THEN StringF(name1,'\s',tname1)
  2962. IF play1control=1 THEN StringF(name2,'\s',tname1)
  2963. IF play1control=2 THEN StringF(name3,'\s',tname1)
  2964. IF play1control=3 THEN StringF(name4,'\s',tname1)
  2965. IF play2control=0 THEN StringF(name1,'\s',tname2)
  2966. IF play2control=1 THEN StringF(name2,'\s',tname2)
  2967. IF play2control=2 THEN StringF(name3,'\s',tname2)
  2968. IF play2control=3 THEN StringF(name4,'\s',tname2)
  2969. IF play3control=0 THEN StringF(name1,'\s',tname3)
  2970. IF play3control=1 THEN StringF(name2,'\s',tname3)
  2971. IF play3control=2 THEN StringF(name3,'\s',tname3)
  2972. IF play3control=3 THEN StringF(name4,'\s',tname3)
  2973. IF play4control=0 THEN StringF(name1,'\s',tname4)
  2974. IF play4control=1 THEN StringF(name2,'\s',tname4)
  2975. IF play4control=2 THEN StringF(name3,'\s',tname4)
  2976. IF play4control=3 THEN StringF(name4,'\s',tname4)
  2977.  
  2978.  
  2979. IF hiddenclosed=TRUE
  2980. hidden:=OpenW(0,11,320,245,IDCMP_RAWKEY, WFLG_BORDERLESS OR WFLG_ACTIVATE, NIL, screen,$F,NIL,NIL)
  2981. hiddenclosed:=FALSE
  2982. ELSE
  2983. SetStdRast(hidden.rport)
  2984. ENDIF
  2985. setcols2()
  2986. IfFL_DecodePic(gamepicmem,screen+184)
  2987. ShowTitle(screen, TRUE)
  2988. offMousePointer(hidden)
  2989. SetTopaz(8)
  2990. setlines()
  2991. Line(4,0,314,0,2)
  2992. Line(4,244,314,244,2)
  2993. Line(4,0,4,244,2)
  2994. Line(314,0,314,244,2)
  2995.  
  2996.  
  2997. Box(193,221,195,223,4)
  2998. Box(38,166,40,168,5)
  2999. Box(105,45,107,47,6)
  3000. Box(275,82,277,84,7)
  3001.  
  3002. IF obstacles=TRUE
  3003. nochips:=Rnd(16)
  3004. REPEAT
  3005. whichchip:=Rnd(2)
  3006. poschip:=Rnd(16)
  3007.  
  3008. IF (pos0=FALSE) AND (poschip=0)
  3009. posx:=36
  3010. posy:=31
  3011. pos0:=TRUE
  3012. badnum:=FALSE
  3013. ENDIF
  3014.  
  3015. IF (pos1=FALSE) AND (poschip=1)
  3016. posx:=38
  3017. posy:=91
  3018. pos1:=TRUE
  3019. badnum:=FALSE
  3020. ENDIF
  3021.  
  3022. IF (pos2=FALSE) AND (poschip=2)
  3023. posx:=45
  3024. posy:=212
  3025. pos2:=TRUE
  3026. badnum:=FALSE
  3027. ENDIF
  3028.  
  3029. IF (pos3=FALSE) AND (poschip=3) 
  3030. posx:=135
  3031. posy:=47
  3032. pos3:=TRUE
  3033. badnum:=FALSE
  3034. ENDIF
  3035.  
  3036. IF (pos4=FALSE) AND (poschip=4)
  3037. posx:=100
  3038. posy:=111
  3039. pos4:=TRUE
  3040. badnum:=FALSE
  3041. ENDIF
  3042.  
  3043. IF (pos5=FALSE) AND (poschip=5)
  3044. posx:=95
  3045. posy:=169
  3046. pos5:=TRUE
  3047. badnum:=FALSE
  3048. ENDIF
  3049.  
  3050. IF (pos6=FALSE) AND (poschip=6) 
  3051. posx:=97
  3052. posy:=210
  3053. pos6:=TRUE
  3054. badnum:=FALSE
  3055. ENDIF
  3056.  
  3057. IF (pos7=FALSE) AND (poschip=7) 
  3058. posx:=144
  3059. posy:=107
  3060. pos7:=TRUE
  3061. badnum:=FALSE
  3062. ENDIF
  3063.  
  3064. IF (pos8=FALSE) AND (poschip=8)
  3065. posx:=186
  3066. posy:=87
  3067. pos8:=TRUE
  3068. badnum:=FALSE
  3069. ENDIF
  3070.  
  3071. IF (pos9=FALSE) AND (poschip=9) 
  3072. posx:=169
  3073. posy:=141
  3074. pos9:=TRUE
  3075. badnum:=FALSE
  3076. ENDIF
  3077.  
  3078. IF (pos10=FALSE) AND (poschip=10)
  3079. posx:=208
  3080. posy:=216
  3081. pos10:=TRUE
  3082. badnum:=FALSE
  3083. ENDIF
  3084.  
  3085. IF (pos11=FALSE) AND (poschip=11)
  3086. posx:=234
  3087. posy:=161
  3088. pos11:=TRUE
  3089. badnum:=FALSE
  3090. ENDIF
  3091.  
  3092. IF (pos12=FALSE) AND (poschip=12)
  3093. posx:=271
  3094. posy:=207
  3095. pos12:=TRUE
  3096. badnum:=FALSE
  3097. ENDIF
  3098.  
  3099. IF (pos13=FALSE) AND (poschip=13)
  3100. posx:=279
  3101. posy:=141
  3102. pos13:=TRUE
  3103. badnum:=FALSE
  3104. ENDIF
  3105.  
  3106. IF (pos14=FALSE) AND (poschip=14)
  3107. posx:=234
  3108. posy:=21
  3109. pos14:=TRUE
  3110. badnum:=FALSE
  3111. ENDIF
  3112.  
  3113. IF (pos15=FALSE) AND (poschip=15)
  3114. posx:=280
  3115. posy:=38
  3116. pos15:=TRUE
  3117. badnum:=FALSE
  3118. ENDIF
  3119.  
  3120. IF badnum=FALSE
  3121. nochips:=nochips-1
  3122. IF whichchip=0 THEN DrawImage(hidden.rport, chip1data, posx,posy)
  3123. IF whichchip=1 THEN DrawImage(hidden.rport, chip2data, posx,posy)
  3124. badnum:=TRUE
  3125. ENDIF
  3126.  
  3127. UNTIL nochips=-1
  3128. ENDIF
  3129.  
  3130. gameinitial()
  3131. ENDPROC
  3132.  
  3133. PROC die(player)
  3134. IF Not ((die1+die2+die3+die4+cdie1+cdie2+cdie3+cdie4)=-8) 
  3135.  
  3136. IF (samplec) AND (player=1)
  3137.   playData(samplec,samplenc,4500000,CHAN_LEFT1,64)
  3138. WaitTOF()
  3139. exitLoop(CHAN_LEFT1)
  3140. ENDIF
  3141.  
  3142. IF (samplec) AND (player=2)
  3143.   playData(samplec,samplenc,4500000,CHAN_LEFT2,64)
  3144. WaitTOF()
  3145. exitLoop(CHAN_LEFT2)
  3146. ENDIF
  3147.  
  3148. IF (samplec) AND (player=3)
  3149.   playData(samplec,samplenc,4500000,CHAN_RIGHT1,64)
  3150. WaitTOF()
  3151. exitLoop(CHAN_RIGHT1)
  3152. ENDIF
  3153.  
  3154. IF (samplec) AND (player=4)
  3155.   playData(samplec,samplenc,4500000,CHAN_RIGHT2,64)
  3156. WaitTOF()
  3157. exitLoop(CHAN_RIGHT2)
  3158. ENDIF
  3159.  
  3160. IF player=1
  3161. IF blocks=TRUE THEN SetColour(screen,4,0,0,127) ELSE SetColour(screen,4,0,0,0)
  3162. die1:=TRUE
  3163. cdie1:=TRUE
  3164. ENDIF
  3165. IF player=2
  3166. IF blocks=TRUE THEN SetColour(screen,5,0,0,127) ELSE SetColour(screen,5,0,0,0)
  3167. die2:=TRUE
  3168. cdie2:=TRUE
  3169. ENDIF
  3170. IF player=3
  3171. IF blocks=TRUE THEN SetColour(screen,6,0,0,127) ELSE SetColour(screen,6,0,0,0)
  3172. die3:=TRUE
  3173. cdie3:=TRUE
  3174. ENDIF
  3175. IF player=4
  3176. IF blocks=TRUE THEN SetColour(screen,7,0,0,127) ELSE SetColour(screen,7,0,0,0)
  3177. die4:=TRUE
  3178. cdie4:=TRUE
  3179. ENDIF
  3180. IF (die1+die2+die3+die4+cdie1+cdie2+cdie3+cdie4)=-7 
  3181. IF (cdie1=FALSE) OR (die1=FALSE) THEN play1:=play1+1
  3182. IF (cdie2=FALSE) OR (die2=FALSE) THEN play2:=play2+1
  3183. IF (cdie3=FALSE) OR (die3=FALSE) THEN play3:=play3+1
  3184. IF (cdie4=FALSE) OR (die4=FALSE) THEN play4:=play4+1
  3185. die1:=TRUE ; die2:=TRUE ; die3:=TRUE ; die4:=TRUE ; cdie1:=TRUE ; cdie2:=TRUE ; cdie3:=TRUE ; cdie4:=TRUE
  3186. not_finished:=FALSE
  3187. Delay(50)
  3188. ENDIF
  3189. ENDIF
  3190. ENDPROC
  3191.  
  3192. PROC decrypt() HANDLE
  3193.  
  3194. samplec:=AllocMem(3900, MEMF_CHIP)
  3195. CopyMem({data}, samplec, 3900)
  3196. samplenc:=3900
  3197.  
  3198. sample:=AllocMem(12760, MEMF_CHIP)
  3199. CopyMem({data}+3900, sample, 12760)
  3200. samplen:=12760
  3201.  
  3202. sampled:=AllocMem(3121, MEMF_CHIP)
  3203. CopyMem({data}+3900+12760, sampled, 3121)
  3204. samplend:=3121
  3205.  
  3206. samplei:=AllocMem(9536, MEMF_CHIP)
  3207. CopyMem({data}+3900+12760+3120, samplei, 9536)
  3208. sampleni:=9536
  3209.  
  3210. EXCEPT DO
  3211. ReThrow()
  3212. ENDPROC
  3213.  
  3214. PROC request(body,no,end)
  3215.  
  3216. IF no=0
  3217. EasyRequestArgs(0,[20,0,'LightSpeed2',body,'Terminate'],0,NIL)
  3218. ELSE
  3219. EasyRequestArgs(0,[20,0,'LightSpeed2',body,end],0,NIL)
  3220. ENDIF
  3221. ENDPROC 
  3222.  
  3223. PROC initaudio() HANDLE
  3224. DEF len=NIL:PTR TO ln, men=NIL:PTR TO mn, iow=NIL:PTR TO iostd, 
  3225. message:PTR TO ioaudio, waveptr:PTR TO INT, errors
  3226.  
  3227.   men:=audioio
  3228.   men.replyport:=audiomp
  3229.   len:=audioio
  3230.   len.pri:=127
  3231.   iow:=audioio
  3232.   audioio.allockey:= 0
  3233.   iow.command := ADCMD_ALLOCATE
  3234.   iow.flags := ADIOF_NOWAIT
  3235.   audioio.data := [15]:CHAR
  3236.   audioio.length := 30000
  3237.   beginIO(audioio)
  3238.  
  3239. IF iow.unit<>15 THEN Raise(ERR_DEV3)
  3240.  
  3241. bob:=audioio.allockey
  3242. EXCEPT DO
  3243. ReThrow()
  3244. ENDPROC
  3245.  
  3246. PROC cleanupaudio()
  3247. DEF iow=NIL:PTR TO iostd
  3248.  
  3249.   iow:=audioio
  3250.   iow.command := ADCMD_FREE
  3251.   audioio.allockey :=bob
  3252.   audioio.data := [15]:CHAR
  3253.   audioio.length := 30000
  3254.   beginIO (audioio)
  3255.  
  3256. ENDPROC
  3257.  
  3258. verstag: CHAR 0, '$VER: LightSpeed 2.0 - Copyright © 1998 Micro Design (15.01.99)',NIL
  3259.  
  3260. mainpic: INCBIN 'light.iff'
  3261. gamepic: INCBIN 'fadetile.iff'
  3262. data: INCBIN 'light.dat'
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.